如何正确隐藏JFrame
我有一个非常简单的JFrame
窗口,其中包含一个按钮:
在main函数中我设置setVisible(true);
我的JFrame
和No
按钮监听器我要关闭窗口,所以我将可见性设置为false: setVisible(false);
然后我做System.exit(0);
为了防止多次运行程序时可能发生的内存泄漏。
我有两个问题:
- 我真的需要
System.exit(0);
在上述情况下? - 如果我将此
JFrame
作为popup
窗口,我实际上无法使用System.exit(0);
因为这将终止整个程序。 那么如何正确关闭弹出窗口并保持在主JFrame
窗口中呢? (现在我只用setVisible(false);
关闭它setVisible(false);
当我通过程序执行多次这样做时,程序变得很慢)。
-
使用
CardLayout
-
如果有另一个弹出容器的真正原因
-
使用
JDialog
与父级到JFrame
,使用setModal
/ModalityTypes
-
只创建一个JDialog,并通过
getContentPane#removeAll()
重用这一个JDialog
-
使用
JOptionPane
进行简单的用户交互
-
-
把两者放在一起,在两点以上,使用
CardLayout
弹出JDialog
与父级到JFrame
,注意从一张卡切换到另一张卡后可能需要调用JDialog.pack()
-
setVisible
会导致减速 -
dispose
会导致减速 -
System.exit
将关闭整个JVM
因此,您应该重用单个JFrame
或JDialog
。
在按钮的ActionListener
,调用frame.setVisible(false);
。 然后不要创建一个新的框架,而是做frame.setVisible(true);
。 如果你想改变帧的内容,有functionframe.getContentPane().removeAll();
。
只需添加: JFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE)
。 注意: JFrame
的默认选项是HIDE_ON_CLOSE
。