2011-04-26 66 views
13

我已經創建了一個基本的CellTable並填充了一些數據。現在我想添加一個clickHandler到每一行,但我不知道如何做到這一點。我爲整個表創建了一個clickEvent,但我希望每行都有一個。將clickHandler添加到GWT CellTable中的行中?

table.sinkEvents(Event.ONCLICK); 
    table.setTitle("Click me"); 
    table.setSize("600px", "600px"); 
    table.addDomHandler(new ClickHandler() 
    { 
     @Override 
     public void onClick(ClickEvent event) 
     { 
      Window.alert("You clicked!" +); 

     } 
    }, ClickEvent.getType()); 

我可以做一些類似的操作來爲每一行添加clickEvent嗎?

回答

27

CellTable已內置支持處理點擊事件。您可以添加一個CellPreviewHandler,當單擊一行時將被調用。它將在事件中接收許多項目,如本地事件,單元格和數據行值。因爲它不僅觸發點擊事件,還需要檢查點擊事件是否被觸發。只需測試通過的事件:boolean isClick = "click".equals(event.getNativeEvent().getType())

另一種選擇是擴展受保護的方法doSelection,但它已被棄用,並且您需要確保您有權設置KeyboardSelectionPolicy以確保在點擊完成後調用它。在接口KeyboardSelectionPolicy的JavaDoc中查看後者。

+0

謝謝!它工作完美。 – gusper 2011-04-26 18:16:14

+3

我認爲你應該考慮使用BrowserEvents.CLICK而不是「點擊」。 – 2013-03-19 11:57:06

+1

'BrowserEvents'僅在GWT 2.5.0以後纔可用 – 2013-03-19 14:58:50

18

另一種方式擁有選擇可以由小區使用NoSelectionModel並將其添加到表:

//EDIT: this is a field, not a local variable 
TheCellObject clickedObject; //the object selected by selectionModel 

final NoSelectionModel<TheCellObject> selectionModel = new NoSelectionModel<TheCellObject>(); 

    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

       @Override 
       public void onSelectionChange(SelectionChangeEvent event) { 
        clickedObject = selectionModel.getLastSelectedObject(); 
       } 
      }); 
cellTable.setSelectionModel(selectionModel); //add selection model to your celltable 
+0

如何訪問內部類中的非最終引用'clickedObject'?你怎麼能改變它?你的代碼似乎不正確。 – nakhli 2012-04-24 12:24:12

+0

這正是我所需要的,絕對正確! – membersound 2013-01-15 10:01:58

+0

@Noya cool謝謝 – nakhli 2013-01-22 16:37:48

相關問題