JFrame:当我尝试关闭其中一个时,所有帧都关闭了

时间:2015-11-17 18:49:50

标签: java swing

public class Scratch {
    public static void main(String[] args) {
        Dimension d = new Dimension(300,300);
        JFrame frame1 = new JFrame("Frame-1");
        JFrame frame2 = new JFrame("Frame-2");
        frame1.setSize(250,250);
        frame2.setSize(d);
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setVisible(true);
        frame2.setVisible(true);
    }
}

当我运行它时,两个帧按预期显示,但当我关闭其中一个时,它们都关闭。我希望实现这样的功能:只有我点击'x'的框架关闭,而另一框架保持打开,直到我点击它上面的'x'。我该怎么做?

2 个答案:

答案 0 :(得分:4)

    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

“EXIT”告诉JVM停止所有窗口关闭:

所以你可以使用:

    frame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

然后,只有您点击的框架才会关闭。当两个帧都关闭时,JVM将退出。

然而,这不是一个好的解决方案。应用程序通常应该只有一个JFrame,然后使用JDialog作为子窗口。使用这种方法代码将是:

JDialog dialog = new JDialog(frame1);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

根据您的要求,您可以将对话框设为模态或非模态。

使用此方法,JVM将在您关闭框架时退出,但在关闭子对话框时它将保持打开状态。

阅读此论坛关于多个JFrame的问题:The Use of Multiple JFrames: Good or Bad Practice?。它将更多地考虑为什么使用2个JFrame不是一个好主意。

答案 1 :(得分:0)

await

你将其中一个添加到你的框架中。

public class Scratch {
    public static void main(String[] args) {
        Dimension d = new Dimension(300,300);
        JFrame frame1 = new JFrame("Frame-1");
        JFrame frame2 = new JFrame("Frame-2");
        frame1.setSize(250,250);
        frame2.setSize(d);
        frame1.setVisible(true);
        frame2.setVisible(true);
    }
}