【问题标题】:Adding clickHandler to row in CellTable in GWT?将clickHandler添加到GWT中CellTable中的行?
【发布时间】:2011-04-26 14:42:58
【问题描述】:

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

【问题讨论】:

    标签: java gwt gwt-2.2-celltable


    【解决方案1】:

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

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

    【讨论】:

    • 我认为你应该考虑使用 BrowserEvents.CLICK 而不是“click”。
    • BrowserEvents 仅从 GWT 2.5.0 起可用
    • @HilbrandBouwkamp:如果我们使用 DataGrid 而不是 CellTable,是否有任何解决方案可以做到这一点。
    • addCellPreviewHandlerAbstractHasData 的一部分,它是 DataGridCellTable 的父类,所以它应该工作相同。
    【解决方案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
    

    【讨论】:

    • 如何访问内部类中的非最终引用clickedObject?你怎么能变异它?您的代码似乎不正确。
    • 这对我来说是一种很好的简单方法,可以绕过 SingleSelectionModel 添加的不需要的(对于我的项目)额外样式,但仍然能够在旧版本 gwt 的点击事件中获取选定的行.谢谢!
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多