E4 NatTable动态上下文菜单

时间:2018-01-23 09:54:02

标签: java eclipse-rcp rcp e4 nattable

我想要更改natTable的上下文菜单项,具体取决于所选行。我怎样才能做到这一点?

更新:到目前为止,我的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;
        }
    });

1 个答案:

答案 0 :(得分:0)

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

有关该主题的博文可以找到更多信息:NatTable context menus with Eclipse menus

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