【发布时间】:2016-04-17 07:55:23
【问题描述】:
我使用 NatTable。如何根据单元格的内容在特定条件下显示上下文菜单项?以及如何选择调用上下文菜单的单元格?我用以下代码绑定菜单
uiBindingRegistry.registerMouseDownBinding(
new MouseEventMatcher(SWT.NONE, null, MouseEventMatcher.RIGHT_BUTTON), new PopupMenuAction(menu));
统一更新:
我创建这样的菜单,但尽管isActive 总是返回false,但“测试”项仍然可见。它有什么问题?
menu = new PopupMenuBuilder(natTable).withMenuItemProvider(ITEM_ID, new IMenuItemProvider() {
@Override
public void addMenuItem(final NatTable natTable, final Menu popupMenu) {
final MenuItem menuItem = new MenuItem(popupMenu, SWT.PUSH);
menuItem.setText("Test");
menuItem.setEnabled(true);
menuItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent event) {
System.out.println("test");
}
});
}
}).withVisibleState(ITEM_ID, new IMenuItemState() {
@Override
public boolean isActive(final NatEventData natEventData) {
return false;
}
}).build();
【问题讨论】:
-
如果常量 ITEM_ID 不为 null,则该代码没有任何问题。问题是,你在哪里创建菜单?我直接在 AbstractUiBindingConfiguration 中创建它,它按预期工作。
-
@Dirk Fauth 我找到了原因。在
CellPopupMenuActionrun()我有menu.setData(event.data)但应该有menu.setData(MenuItemProviders.NAT_EVENT_DATA_KEY, event.data)。然后一切都按预期工作。 -
感谢您的提示...我完全忘记了那个细节。我更新了答案中的示例代码以正确反映这一点。
-
我又找到原因了bugs.eclipse.org/bugs/show_bug.cgi?id=451490你用的是哪个版本的Eclipse/JFace?
-
@Dirk Fauth 4.3.0/3.9.1