我创建了一个 Java Swing 应用程序,它没有可见的主窗口,但通过右键单击通过其托盘图标进行控制。
我为此使用了 JPopupMenu,但是当我在弹出菜单之外(例如,在另一个应用程序的窗口或桌面上)单击时,JPopupMenu 不会消失,这不是预期的行为。
最初我使用的是一个弹出菜单,它确实按预期工作,但这不允许我在菜单中有图标。
当我按预期点击别处时如何让它关闭?

最佳答案

//_Popup is your JPopupMenu, call this method before setting your popup to visible
public void armPopup()
{
    if(_Popup != null)
    {
        Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
        {
            @Override
            public void eventDispatched(AWTEvent event) {

                if(event instanceof MouseEvent)
                {
                    MouseEvent m = (MouseEvent)event;
                    if(m.getID() == MouseEvent.MOUSE_CLICKED)
                    {
                        _Popup.setVisible(false);
                        Toolkit.getDefaultToolkit().removeAWTEventListener(this);
                    }
                }
                if(event instanceof WindowEvent)
                {
                    WindowEvent we = (WindowEvent)event;
                    if(we.getID() == WindowEvent.WINDOW_DEACTIVATED || we.getID() == WindowEvent.WINDOW_STATE_CHANGED)
                    {
                        _Popup.setVisible(false);
                        Toolkit.getDefaultToolkit().removeAWTEventListener(this);
                    }
                }
            }

        }, AWTEvent.MOUSE_EVENT_MASK | AWTEvent.WINDOW_EVENT_MASK);

    }
}

10-07 12:04