我添加了一个AWTEventListener来处理抓取事件。因此,此侦听器仅使用sun.awt.SunToolkit.GRAB_EVENT_MASK
标记。
但是此侦听器无法捕获UngrabEvent。棘手的事情是,当JComboBox弹出其菜单列表时,它可以捕获此事件。
我使用以下代码进行测试。
启动程序,单击框架的空白区域,单击框架标题。然后应该有一个UngrabEvent。但是侦听器不会捕获它。
启动程序,单击组合框,然后弹出其菜单列表。点击
框架标题。然后应该有一个UngrabEvent。然后听众捕获它。
这很奇怪... UngrabEvent和JComboBox之间是否有任何关系?
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);
}
}
最佳答案
我感觉到您正在尝试;但通常,您不应该依赖Sun / Oracle的未记录API。
我想要一个弹出窗口,当
在弹出窗口外按下鼠标,但是
在弹出窗口上按下鼠标时不会隐藏。
为什么在看到JDialog
时不显示它,而又看到另一个窗口被激活时却隐藏了它,为什么不隐藏它呢?在here中讨论了该概念。