Java 选择Action.AS\u复选框时,如何保持菜单管理器打开以允许多个选择

Java 选择Action.AS\u复选框时,如何保持菜单管理器打开以允许多个选择,java,swt,jface,Java,Swt,Jface,我有一个上下文菜单,其中有一个称为子菜单的子菜单,其中包括一些项目,每个项目都是一个动作 我想做的是让用户能够选择多个项目,而不必重新打开菜单和子菜单,直到他点击离开 类似的问题已经解决,但我不知道如何保持子菜单也打开 给你 此代码保持第一个菜单打开,但子菜单不打开 非常感谢您的帮助:) public void test() { final TableViewer tableViewer = new TableViewer(PlatformUI.getWorkbench().getAct

我有一个上下文菜单,其中有一个称为子菜单的子菜单,其中包括一些项目,每个项目都是一个动作

我想做的是让用户能够选择多个项目,而不必重新打开菜单和子菜单,直到他点击离开

类似的问题已经解决,但我不知道如何保持子菜单也打开

给你

此代码保持第一个菜单打开,但子菜单不打开

非常感谢您的帮助:)

public void test() {
    final TableViewer tableViewer = new TableViewer(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());

    MenuManager menuMgr = new MenuManager("#PopupMenu");
    menuMgr.setRemoveAllWhenShown(false);
    final Menu menu = menuMgr.createContextMenu(tableViewer.getControl());
    tableViewer.getControl().setMenu(menu);

    menuMgr.addMenuListener(new IMenuListener() {
        public void menuAboutToShow(IMenuManager manager) {
            manager.add(new Separator("Actions")); // Where manager is a IMenuManager which is passed as a parameter of menuAboutToShow of addMenuListener
            final MenuManager submenu = new MenuManager("Show actions");
            manager.add(submenu);

            for (final TableColumn tc : tableViewer.getTable().getColumns()) {
                Action action = new Action(tc.getToolTipText(), Action.AS_CHECK_BOX) {
                    @Override
                    public boolean isEnabled() {
                        return true;
                    }

                    @Override
                    public boolean isChecked() {
                        return tc.getWidth() != 0;
                    }

                    @Override
                    public void run() {
                        if (mainMenuPoint == null)
                            return;

                        Display.getDefault().asyncExec(new Runnable() {

                            public void run() {

                                menu.setLocation(mainMenuPoint);
                                menu.setVisible(true);

                                Display.getDefault().asyncExec(new Runnable() {

                                    public void run() {
                                        submenu.setVisible(true);

                                    }
                                });

                            }
                        });

                    }

                };
                submenu.add(action);
            }
        }


    });
}