首页 > 解决方案 > 纯 GWT,事件转换

问题描述

所以,我在 GWT 中有一个“FlexTable”,我需要在右键单击某个单元格时下拉操作列表。在鼠标左键单击以检索我的单元格的“rowIndex”时,我只需使用 ClickEvent 方法“getCellForEvent(event).getRowIndex()”。但是纯 GWT 中没有右键单击处理程序。所以我决定使用需要 ContextMenuEvent 的 ContextMenuHandler。而且,当然,我不能将 ContextMenuEvent 放入 ClickEvent 方法“getCellForEvent”中。这种情况有什么解决办法吗?或者,也许有人知道在“FlexTable”上右键单击下拉列表的更简单方法。

标签: javaeventsgwtflextable

解决方案


我已经为 CellTable 或 DataGrid 小部件完成了此操作,但不是 FlexTable。对于前者,我将一个处理程序对象应用于整个网格小部件,并使用事件来计算事件发生所在的行或单元格。我看不出如何使用 FlexTable 来完成。

使用 FlexTable,一个技巧是为每个单元格创建一个处理程序对象,并在创建时告诉它单元格/行。像这样的东西:

    cell.addDomHandler(new ContextMenuHandler() {
        @Override
        public void onContextMenu(ContextMenuEvent event)
        {
            // stop the browser from opening the context menu
            event.preventDefault();
            event.stopPropagation();

            NativeEvent nativeClickEvent = event.getNativeEvent();

            displayPopupMenuForCell(cell, nativeClickEvent);
        }
    }, ContextMenuEvent.getType());

在上面,cell需要是一个Widget。因此,您需要获取 HTMLTable 中的元素(FlexTable 扩展了 HTMLTable,这是一个普通的 HTML 表格元素)并将其包装为小部件。我不知道该怎么做,但这是可能的。

另一件事是,您需要防止浏览器弹出自己的上下文菜单。我将此添加到body标签中的 html 文件中:

  <body oncontextmenu="return false" >

推荐阅读