2011-12-19 2 views
2

행을 선택하면 해당 행의 어떤 열을 선택했는지 알고 싶습니다.GWT CellTable/DataGrid - 열 선택을 감지하는 방법?

현재, 내가

protected void onBrowserEvent2(Event event) 
{ 
    // Get the event target. 
    EventTarget eventTarget = event.getEventTarget(); 
    if (!Element.is(eventTarget)){ 
    return; 
    } 

    final Element target = event.getEventTarget().cast(); 

    // Find the cell where the event occurred. 
    TableCellElement tableCell = findNearestParentCell(target); 
    if (tableCell == null) { 
    return; 
    } 

    int col = tableCell.getCellIndex(); 

    .... blah ... blah .... 
} 

,

//exact replica code from {@link AbstractCellTable} private method findNearestParentCell 
private TableCellElement findNearestParentCell(Element elem) { 
    while ((elem != null) && (elem != getElement())) { 
    // TODO: We need is() implementations in all Element subclasses. 
    // This would allow us to use TableCellElement.is() -- much cleaner. 
    String tagName = elem.getTagName(); 
    if ("td".equalsIgnoreCase(tagName) || "th".equalsIgnoreCase(tagName)) { 
     return elem.cast(); 
    } 
    elem = elem.getParentElement(); 
    } 
    return null; 
} 

onBrowserEvent2 오버라이드 (override) 할이 유일한 방법이 있나요? 클릭 한 행의 열을 알려주는 변경 이벤트가있는 선택 모델이 있습니까?

열 또는 열 셀에 클릭 핸들러를 구현하는 방법이 있습니까?

답변

4

OMG ... 이것은 정말 간단한 해결책이었습니다.

열에 ClickableTextCell 확장자를 사용하십시오.

public class SelectableTextCell 
extends ClickableTextCell 
{ 
    @Override 
    public void onBrowserEvent(
    Context context, 
    Element parent, 
    String value, 
    NativeEvent event, 
    ValueUpdater<String> valueUpdater) 
    { 
    GWT.log("event="+event.getType()); //$NON-NLS-1$ 
    doYourThing(); 
    if (IWishToPropagateTheClick) 
     super.onBrowserEvent(context, parent, value, event, valueUpdater); 
    } 
} 

보다 일반적인 경우에는 AbstractCell을 확장하고 생성자에서 소비 된 이벤트를 지정하십시오.

+1

아마도 위의 예에서 셀의 열 인덱스를 반환하는 context.getColumn()을 참조 할 수 있습니다. –

관련 문제