情况如下:
我的应用程序包含一个包含x个元素和一个按钮的对话框。用户在与元素交互后按下按钮,如果他以特定方式与之交互,则只出现对话框所在的父框架。
为此目的,我目前知道这种方法:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(false);
jDialog.setVisible(true);
}
});
}
然后在位于jDialog内的Button上添加此命令:
new NewJFrame().setVisible(true);
这样做很好而且很整洁,但之前使用new NewJFrame().setVisible(false);
调用的实例仍在运行(据我所知)。
无论如何我不能按下按钮(驻留在jDialog内)按下这样的动作:
NewJFrame.setVisible(true);
(它目前给我错误:Non-static method cannot be referenced from static context
)
答案 0 :(得分:2)
确保对话框是模态的,您只需执行以下操作:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
NewJFrame newJFrame = new NewJFrame();
newJFrame.pack();
// no need to set visible false. It already is
MyDialog myDialog = new MyDialog(newJFrame);
// make sure the super constructor makes the dialog modal
myDialog.pack();
myDialog.setVisible(true);
// here the dialog is no longer visible
// and we can extract data from it and send it to the JFrame if needed
newJFrame.setVisible(true); // ****** here
}
});
}
否则,如果您绝对必须在JDialog中使用JFrame,只需将NewJFrame传递给JDialog的构造函数,这是您需要做的事情,因为它应该在JDialog超级构造函数中使用,使用它设置NewJFrame字段,并在对话框内的实例上调用setVisible(true)
。