java - 显示 NatTable 上下文菜单

标签 java swt nattable

我使用 NatTable。如何根据单元格的内容在特定条件下显示上下文菜单项?以及如何选择调用上下文菜单的单元格?我用下面的代码绑定(bind)菜单

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();

最佳答案

给出的答案是正确的。虽然可以改进。您不需要 SelectionLayer。

class CellPopupMenuAction implements IMouseAction {

    private final Menu menu;

    public CellPopupMenuAction(Menu menu) {
        this.menu = menu;
    }

    @Override
    public void run(NatTable natTable, MouseEvent event) {
        int columnPosition = natTable.getColumnPositionByX(event.x);
        int rowPosition = natTable.getRowPositionByY(event.y);

        ILayerCell cell = natTable.getCellByPosition(columnPosition, rowPosition);

        if (!cell.getDisplayMode().equals(DisplayMode.SELECT)) {
            natTable.doCommand(
                    new SelectCellCommand(
                            natTable,
                            columnPosition,
                            rowPosition,
                            false,
                            false));
        }

        menu.setData(MenuItemProviders.NAT_EVENT_DATA_KEY, event.data);
        menu.setVisible(true);
    }
}

这样您就完全不需要引用 SelectionLayer,甚至可以改进功能,因为如果您右键单击选定的单元格,SelectCellCommand 永远不会被触发。

关于java - 显示 NatTable 上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748101/

相关文章:

java - eclipse swt ExpandBar : wrong size on expand/collaps events

java - 如何覆盖 JFace 向导的下一个按钮事件

java - Nebula Nattable - 动态更改列

eclipse - 如何在 RCP/SWT 表单元格中准确获取 Eclipse 编辑器类型的工具提示

java - 如何对釉面TreeList进行排序?

java - NatTable 单元格中的图标

java - 绑定(bind)两个泛型

Java Socket 未接收连接

java - 我应该手动关闭从数据源获得的连接吗?

rsa - 如何找到一个小于另一个随机 BigInteger 的随机 BigInteger?