第二个JFrame首先关闭

时间:2013-10-21 16:39:53

标签: java swing jframe

两个JFrame s,

JFrame Main; // Main JFrame

JFrame Sub; //Second JFrame that is initialized from within Main via a JMenuItems ActionListener.

mainMenuItem.setActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
        try{
            Sub subFrame = new Sub();
            subFrame.setVisible(true);
        }catch(Exception e){}
        }
    });
}

问题是每当我关闭第二个JFrame(Sub)时它关闭第一个也是。

两个JFrame都有:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

这是问题的一部分吗?

3 个答案:

答案 0 :(得分:5)

EXIT_ON_CLOSE表示在关闭框架时立即退出程序(System.exit())。

您可能希望将其设置为DISPOSE_ON_CLOSE,然后添加WindowListener并仅在两个框架都已关闭时关闭程序。

(或者,您可能只希望主框架具有EXIT_ON_CLOSE

答案 1 :(得分:3)

是。根据定义,JFrame.EXIT_ON_CLOSE退出应用程序。对于您的第二个Frame使用DISPOSE_ON_CLOSEHIDE_ON_CLOSE

希望这有帮助!

答案 2 :(得分:2)

你说:

  

JFrame Sub; //通过JMenuItems ActionListener从Main内初始化的第二个JFrame。

这表明你遇到了设计问题:

  • 你的第二个“框架”甚至不应该是一个JFrame,因为它不是一个单独的独立主程序窗口。
  • 相反,它充当对话框,因为它依赖于父窗口(主JFrame)并显示。因此,将辅助窗口设为JDialog而不是JFrame,所有这些问题都将消失。
  • 您需要考虑是否应该是模态对话框,其中对话框打开时主窗口无法访问用户,或者非模态对话框。
  • 话虽如此,您甚至可以更好地使用一个窗口/ JFrame并通过CardLayout交换视图。

请阅读此链接:The Use of Multiple JFrames, Good/Bad Practice?,特别请看看Andrew Thompson的社区wiki答案。