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 的点击中提取必要的信息。
我希望我的 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 的点击中提取必要的信息。