2010-02-25 34 views
1

我添加了AWTEventListener來處理抓取事件。因此,這只是監聽使用sun.awt.SunToolkit.GRAB_EVENT_MASK 標誌。 但是這個監聽器不能捕獲UngrabEvent。棘手的是,當一個JComboBox出現它的menulist時,它可以捕獲這個事件。 我使用下面的代碼進行測試。 啓動程序,點擊框架的空白區域,點擊框架標題。那麼應該有一個UngrabEvent。但是聽衆並沒有捕捉到它。 啓動程序,單擊組合框並使其menulist popuped。點擊 框架標題。那麼應該有一個UngrabEvent。聽衆捕捉它。 這很奇怪...... UngrabEvent和JComboBox之間有什麼關係嗎?無法通過使用GRAB_EVENT_MASK接收抓取事件?

public class ComboboxLearn { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Toolkit toolkit = Toolkit.getDefaultToolkit(); 
     toolkit.addAWTEventListener(new AWTEventListener() { 

      @Override 
      public void eventDispatched(AWTEvent event) { 
       System.out.println(event); 
      } 
     }, sun.awt.SunToolkit.GRAB_EVENT_MASK); 
     JComboBox box = new JComboBox(new Object[] { "AAA", "BBB", "CCC" }); 

     box.addPopupMenuListener(new PopupMenuListener() { 

      @Override 
      public void popupMenuCanceled(PopupMenuEvent e) { 
       System.out.println(e); 
      } 

      @Override 
      public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { 
       System.out.println(e);// Set a breakpoint here 
      } 

      @Override 
      public void popupMenuWillBecomeVisible(PopupMenuEvent e) { 
       System.out.println(e); 
      } 
     }); 

     JFrame f = new JFrame(); 
     f.getContentPane().setLayout(new FlowLayout()); 
     f.getContentPane().add(box); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(new Dimension(100, 100)); 

     f.setVisible(true); 
    } 
} 
+0

嗯,我從來沒有聽說過的抓鬥或ungrab事件,但也許如果你解釋你所要完成有人可以提供另一種方法是什麼。 – camickr 2010-02-25 16:05:31

+0

JComboBox使用彈出列表。但如果我按下鼠標或按下某個鍵,彈出列表將會隱藏。我想要一個彈出窗口,當鼠標在彈出窗口外按下時會隱藏,但當鼠標按下彈出窗口時不會隱藏。 – DeepNightTwo 2010-02-26 17:42:05

回答

1

我覺得你在試驗;但通常情況下,您不應該依賴Sun/Oracle的未公開API。

我希望有一個彈出當按下彈出外 鼠標,但是當按下彈出鼠標 不隱瞞,將隱藏。

爲什麼不把一個JDialog當你看到isPopupTrigger()和隱藏它,當你看到它停用,因爲另一個窗口激活?這個概念被討論here

+0

很高興看到關於這個問題的一些討論。 在討論中,問題沒有解決。解決方法不是關於Popup,而是關於PopupMenu。 – DeepNightTwo 2010-02-26 17:43:34

+0

是的,它看起來相當平臺特定。如上所述,我會考慮使用標準API的另一種方法。 – trashgod 2010-02-26 20:17:33