操作进入子菜单上下文菜单Java JFace SWT Eclipse

use*_*218 5 java eclipse contextmenu

我在开发中遇到了一个Eclipse Plug-In的问题.

有一个视图可以与名册相媲美.那里有一个用户列表.我的问题是,我想添加一个上下文菜单.
我们的想法是对用户执行右键单击,然后会弹出菜单.到目前为止这么好......但问题是我不想要一个单一的菜单.我希望在该上下文菜单中有一个条目"设置状态",当一个人在这个条目上盘旋时,菜单应该被扩展为显示诸如"离开","忙","看不见"之类的东西等等......
任何人都可以提供帮助我出去实现这个目标?

我已经实现了相应的操作并添加了MenuManager.

public SessionViewContextMenu(ViewPart sessionView, TableViewer viewer,
    final Action action) {

    MenuManager manager = new MenuManager("#PopupMenu");

    manager.setRemoveAllWhenShown(true);
    manager.addMenuListener(new IMenuListener() {

        public void menuAboutToShow(IMenuManager manager) {
            manager.add(action);
        }
    });
Run Code Online (Sandbox Code Playgroud)

相应的行为如下所示:

public Action(...) {

    super(provider, "Bla Bla");

    // some fancy picture
    setImageDescriptor(...);

    // setId(ACTION_ID);

    setToolTipText("Bla Bla");

    update();
}
Run Code Online (Sandbox Code Playgroud)

一切正常(至少上下文菜单显示条目).现在我想在一个悬停/选择相应的动作时扩展菜单.所以菜单应该扩展并在这里显示更多的可能性......
任何关于如何创建递归上下文菜单的帮助都非常感谢!

希望,您了解问题并不要犹豫要求澄清!

Gna*_*ark 11

只需创建一个子菜单并将操作添加到此子菜单.
这是一个快速的片段,应该澄清用法:

            // submenu for a specific user
            MenuManager subMenu = new MenuManager("Change Status", null);

            // Actions for the sub menu
            subMenu.add(someAction);

            // add the action to the submenu
            manager.add(subMenu);
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

放在一起:

public SessionViewContextMenu(ViewPart sessionView, TableViewer viewer,
final Action action) {

MenuManager manager = new MenuManager("#PopupMenu");

manager.setRemoveAllWhenShown(true);
manager.addMenuListener(new IMenuListener() {

    public void menuAboutToShow(IMenuManager manager) {
        manager.add(action);

        // submenu for a specific user
        MenuManager subMenu = new MenuManager("Change Status", null);

        // Actions for the sub menu
        subMenu.add(someAction);

        // add the action to the submenu
        manager.add(subMenu);
    }
});
Run Code Online (Sandbox Code Playgroud)