0

两个JFrames,

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);

这是问题的一部分吗?

4

3 回答 3

5

EXIT_ON_CLOSESystem.exit()表示当框架关闭时立即退出程序( )。

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

(或者,也许您只希望主框架具有EXIT_ON_CLOSE

于 2013-10-21T16:45:09.317 回答
3

是的。JFrame.EXIT_ON_CLOSE根据定义退出应用程序。供您第二次Frame使用DISPOSE_ON_CLOSEHIDE_ON_CLOSE.

希望这可以帮助!

于 2013-10-21T16:46:12.277 回答
2

你说:

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

这表明你有一个设计问题:

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

请阅读此链接:多个 JFrame 的使用,好/坏做法?,特别是请查看 Andrew Thompson 的社区 wiki 答案。

于 2013-10-21T16:51:01.703 回答