我已经创建了一个基本的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
,它将在单击一行时被调用。它将在事件中接收许多项,如本机事件、单元格和数据行值。因为它不仅为点击事件触发,所以您需要检查点击事件是否被触发。简单地测试事件是否通过: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<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