一千萬個為什麽

搜索

(Java)如果我在其外面點擊,JPopupMenu將不會關閉


我創建了一個Java Swing應用程序,該應用程序沒有可見的主窗口,但通過右鍵單擊可通過其托盤圖標進行控制。

我正在使用JPopupMenu,但是當我點擊彈出菜單之外(例如在另一個應用程序的窗口或桌面上)時,JPopupMenu不會消失,這不是預期的行為。

最初我使用的是popupMenu,它按預期工作,但這不允許我在菜單中有圖標。

如我所說,當我點擊其他地方時,如何讓它關閉?

謝謝!

最佳答案

//_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);

    }
}

轉載註明原文: (Java)如果我在其外面點擊,JPopupMenu將不會關閉

猜你喜歡