Swing:在窗口上捕获MouseEvent,被模态对话框阻止了吗?

时间:2015-11-26 11:33:38

标签: java swing awt

我有一个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上捕获事件吗?或者我是在完全错误的轨道上?

0 个答案:

没有答案
相关问题