在创建基于Swing的应用时,我一直在努力解决一些问题。我有一个主要的JFrame,包括:
JButton与ActionListener链接。单击JMenu(MenuListener)会显示一个带有某种形式的JDialog。问题是,当JDialog关闭时(无论我是使用dispose()还是showVisible(false)都没有区别)我需要在它第一次触发之前单击JButton两次。从现在起,它通常只需点击一下即可。
每当JDialog出现在前面时,就会出现问题。
PS。 JDialog设置为模态,JFrame为父级。
答案 0 :(得分:3)
这听起来像是焦点问题。
第一次点击将焦点恢复到应用,第二次点击按钮。通常情况下,当JDialog具有错误的父级并且无法返回焦点时,我已经看到了这一点。
答案 1 :(得分:1)
感谢您的回答。
我考虑发布一些代码,但它涉及4个类,所以会很长。
我之前也尝试过关注的事情,但没有任何帮助。有趣的是:如果我按new myDialog.showVisible(true)
显示JDialog,它的行为就像我所描述的那样。但如果我使用这样的结构:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JDialog.setVisible(true);
}
});
它正常关闭并且在响应之前不需要单击父框架,但另一方面,显示的Dialog需要这样。另外,我不明白,打开Dialog光标后放在文本字段中我可以正常写,但是点击它上面的一些按钮我必须在对话框上单击一次,只有第二次和下次点击的行为就像我想要的那样
PS。像第二个包含示例中那样关闭对话框不会改变任何内容。