繁体   English   中英

如何在SWT中禁用系统任务栏图标的上下文菜单?

[英]How do disable a system tray icon's context menu in SWT?

我有任务栏图标,并在其上附加了一个菜单,以便当用户右键单击它时,它会弹出。

在我的应用程序中,我想禁止显示内容菜单,然后稍后再次启用它。 我该怎么做? 我无法找到示例,并且执行mnuPopup.setEnabled(false)似乎不起作用。

这是创建任务栏图标并将菜单附加到其上的代码段。

Tray trySysTray = display.getSystemTray();
Menu mnuPopup = new Menu(shell, SWT.POP_UP);
TrayItem itmTrayItem = new TrayItem(trySysTray, SWT.NONE);

itmTrayItem.addListener(SWT.MenuDetect, new Listener() {
    public void handleEvent(Event event) {
        mnuPopup.setVisible(true);
    }
});

应该执行以下操作:

public class MiniExample {
    // the boolean to decide if menu is shown
    private static boolean showMenu = true;

    public static void main(String[] args) {
        Display display = Display.getDefault();
        final Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());

        Tray tray = display.getSystemTray();
        final TrayItem item = new TrayItem(tray, SWT.NONE);

        // INPUT A REAL IMAGE HERE!
        item.setImage(SOME_IMAGE);

        item.addMenuDetectListener(new MenuDetectListener() {

            @Override
            public void menuDetected(MenuDetectEvent event) {
            // if menu shall not be shown, tell it to the event
                if(!showMenu)
                {
                    event.doit = false;
                    return;
                }

            // else create the menu
                Menu menu = new Menu(shell, SWT.POP_UP);
                MenuItem menuitem = new MenuItem(menu, SWT.PUSH);
                menuitem.setText("Do Something");
                menuitem.addListener(SWT.Selection, new Listener() {
                    public void handleEvent(Event e) {
                        System.out.println("Do something!");
                    }
                });

                menu.setVisible(true);
                while (!menu.isDisposed() && menu.isVisible()) {
                    if (!shell.getDisplay().readAndDispatch())
                        shell.getDisplay().sleep();
                }

            // remember to dispose it !!
                menu.dispose();
            }
        });

        Button button = new Button(shell, SWT.PUSH);
        button.setText("Button");
        button.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent arg0) {
                // button decides if menu is shown or not
                showMenu = !showMenu;
            }

            @Override
            public void widgetDefaultSelected(SelectionEvent arg0) {

            }
        });

        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM