E4 NatTable 动态上下文菜单

E4 NatTable dynamic context menu

我希望我的 natTable 的上下文菜单项根据所选行进行更改。我怎样才能做到这一点?

更新:到目前为止这有效,我在 even/uneven 行上显示了 A 和 B。我的下一个问题是:这是否意味着我必须为每个菜单项组调用这些方法?

myPopupMenuBuilder.withMenuItemProvider("A", new IMenuItemProvider() {
        @Override
        public void addMenuItem(NatTable paramNatTable, Menu paramMenu) {
            MenuItem row = new MenuItem(paramMenu, SWT.PUSH);
            row.setText("A");
        }
    }).withMenuItemProvider("B", new IMenuItemProvider() {
        @Override
        public void addMenuItem(NatTable paramNatTable, Menu paramMenu) {
            MenuItem row = new MenuItem(paramMenu, SWT.PUSH);
            row.setText("B");
        }
    }).withVisibleState("A", new IMenuItemState() {
        @Override
        public boolean isActive(NatEventData paramNatEventData) {
            return paramNatEventData.getRowPosition() % 2 == 0;
        }
    }).withVisibleState("B", new IMenuItemState() {
        @Override
        public boolean isActive(NatEventData paramNatEventData) {
            return paramNatEventData.getRowPosition() % 2 == 1;
        }
    });

这取决于您如何实现上下文菜单。如果您使用 NatTable 方式注册上下文菜单(我通常建议这样做),您可以使用 PopupMenuBuilder#withEnabledState()PopupMenuBuilder#withVisibleState()。在 IMenuItemState 的实现中,您可以获得执行点击的位置,然后可以使用它来获取基础数据。

有关该主题的更多信息可以在我的博客 post 中找到:NatTable context menus with Eclipse menus

如果您想使用 E4 菜单,您将必须实施一些额外的逻辑,以从有关 NatTable 的点击中提取必要的信息。