14

我创建了一个基本的 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 吗?

4

2 回答 2

30

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

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

于 2011-04-26T16:24:46.937 回答
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
于 2011-05-30T14:25:19.457 回答