将clickHandler添加到GWT中的CellTable中的行?

我创建了一个基本的CellTable并用一些数据填充它。 现在我想为每一行添加一个clickHandler,但我不知道该怎么做。 我已经为整个表创建了一个clickEvent,但是每行需要一个。

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吗?

CellTable内置支持处理点击事件。 您可以添加一个CellPreviewHandler ,当单击一行时,将调用其中的CellPreviewHandler 。 它将在事件中接收许多项,如本机事件,单元格和数据行值。 因为它不仅会触发点击事件,还需要检查是否触发了click事件。 只需测试传递的事件: boolean isClick = "click".equals(event.getNativeEvent().getType())

另一种选择是扩展受保护的方法doSelection ,但它已被弃用,并且您需要确保设置正确的KeyboardSelectionPolicy以确保在单击完成时调用它。 请参阅KeyboardSelectionPolicy接口的JavaDoc中的后者。

可以使用NoSelectionModel制作选择单元格的另一种方法,并将其添加到表中:

 //EDIT: this is a field, not a local variable TheCellObject clickedObject; //the object selected by selectionModel final NoSelectionModel selectionModel = new NoSelectionModel(); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { clickedObject = selectionModel.getLastSelectedObject(); } }); cellTable.setSelectionModel(selectionModel); //add selection model to your celltable