2

在基于 Swing 创建我的应用程序时,我一直在努力解决一些问题。我有一个主要的 JFrame,其中包括:

  1. 菜单
  2. JPanel 包含一个 JButton 和一个 JLabel

JButton 与 ActionListener 链接。单击 JMenu (MenuListener) 会弹出一个带有某种形式的 JDialog。问题是,当 JDialog 关闭时(无论我使用 dispose() 还是 showVisible(false) 都没有区别),我需要在第一次触发之前单击 JButton 两次。从现在开始,它通常只需单击一下即可。

每次JDialog在前面,问题就出现了。

PS。JDialog 设置为模态的,以 JFrame 作为父级。

4

2 回答 2

4

这听起来像是一个焦点问题。

第一次单击将焦点恢复到应用程序,第二次单击按钮。通常,当 JDialog 的父级错误并且无法返回焦点时,我会看到这种情况。

于 2012-05-07T22:56:59.733 回答
1

谢谢您的回答。

我考虑过发布一些代码,但它涉及 4 个类,所以会很长。

我之前也尝试过专注的事情,但没有任何帮助。有趣的是:如果我通过它显示 JDialog,new myDialog.showVisible(true)它的行为就像我所描述的那样。但是,如果我使用这样的构造:

    SwingUtilities.invokeLater(new Runnable() {

        public void run() {
            new JDialog.setVisible(true);
        }
    });

它正常关闭,并且在响应之前不需要单击父框架,但另一方面,显示的 Dialog 需要这样做。另外,我不明白的是,打开对话框后,光标放在文本字段中,我可以正常书写,但是要单击它上面的某个按钮,我必须在对话框上单击一次,只有第二次和下一次单击的行为就像我想要的那样.

PS。在第二个包含的示例中关闭对话框不会改变任何内容。

于 2012-05-09T16:08:06.263 回答