将点击处理程序添加到GWT中CellTable中的行?

2022-09-03 16:44:05

我创建了一个基本的CellTable,并用一些数据填充了它。现在我想在每行添加一个点击处理程序,但我不确定如何做到这一点。我已经为整个表创建了一个 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 吗?


答案 1

CellTable 内置了对处理单击事件的支持。您可以添加一个,该名称将在单击行时在其他人中调用。它将在事件中接收许多项目,如本机事件、单元格和数据行值。由于它不仅针对点击事件触发,因此您需要检查该点击事件是否被触发。只需测试通过的事件:。CellPreviewHandlerboolean isClick = "click".equals(event.getNativeEvent().getType())

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


答案 2

可以使用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

推荐