我有一个JFrame,它打开一个模态JDialog。 当JDialog打开时,JFrame安静了一些按钮,这些按钮不应该可用 - >因此,模态JDialog。 但是当单击JDialog外部的区域时,JDialog应该关闭。不过,我在下面概述的解决方案并没有捕获JFrame上的任何MouseEvent。
我现在需要弄清楚用户是否点击了窗口但是在JDialog之外
根据评论执行此操作的原因:一旦用户在外部点击它,JDialog应该关闭!
我目前最好的猜测是创建一个AWTEventListener(如how to obtain mouse click coordinates outside my window in Java中所示):
listener = new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
if (!event.getSource().getClass().equals(ButtonDialog.class)
&& event.getID() == 502) {
ButtonDialog.this.dispose();
}
}
};
然后在JDialog打开时添加它:
Toolkit.getDefaultToolkit().addAWTEventListener(
listener, AWTEvent.MOUSE_EVENT_MASK);
不幸的是,当Dialog是模态的时,在Dialog之外似乎没有发生AWT事件 我考虑过使用JFrame的GlassPane,但这看起来真的很不切实际 我可以在这样的“模块化”Windows上捕获事件吗?或者我是在完全错误的轨道上?