将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