启动应用程序作为调用父框架的Dialog

时间:2015-07-07 17:16:18

标签: java swing jframe parent-child jdialog

情况如下:

我的应用程序包含一个包含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

1 个答案:

答案 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)