我添加了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);
}
}
嗯,我從來沒有聽說過的抓鬥或ungrab事件,但也許如果你解釋你所要完成有人可以提供另一種方法是什麼。 – camickr 2010-02-25 16:05:31
JComboBox使用彈出列表。但如果我按下鼠標或按下某個鍵,彈出列表將會隱藏。我想要一個彈出窗口,當鼠標在彈出窗口外按下時會隱藏,但當鼠標按下彈出窗口時不會隱藏。 – DeepNightTwo 2010-02-26 17:42:05