如何保持MenuManager打开,以便在选择Action.AS_CHECK_BOX时进行多项选择

时间:2014-08-14 16:49:32

标签: java swt jface

我有一个上下文菜单,其中有一个名为子菜单的子部分,其中包含一些项目,每个项目都是一个Action。

我想要做的是让用户能够选择多个项目而无需重新打开菜单和子菜单,直到他点击为止。

类似的问题已得到解决和解决,但我很困惑如何保持子菜单也打开。

此处a link

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


    });
}

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

非常感谢任何帮助:)

0 个答案:

没有答案