Java 如何正确隐藏JFrame
我有一个非常简单的Java 如何正确隐藏JFrame,java,swing,memory-leaks,jframe,Java,Swing,Memory Leaks,Jframe,我有一个非常简单的JFrame窗口,其中包含一个按钮:No 在主功能中,我设置setVisible(true)myJFrame在No按钮侦听器中,我想关闭窗口,以便将可见性设置为false:setVisible(false)之后我执行系统退出(0)以防止程序多次运行时可能出现的内存泄漏 我有两个问题: 我真的需要系统退出(0)在上述情况下 如果我将此JFrame作为弹出窗口使用,我将无法真正使用系统。退出(0)
JFrame
窗口,其中包含一个按钮:No
在主功能中,我设置setVisible(true)
myJFrame
在No
按钮侦听器中,我想关闭窗口,以便将可见性设置为false:setVisible(false)代码>之后我执行系统退出(0)代码>以防止程序多次运行时可能出现的内存泄漏
我有两个问题:
我真的需要系统退出(0)代码>在上述情况下
如果我将此JFrame
作为弹出窗口
使用,我将无法真正使用系统。退出(0)因为这将终止整个程序。那么,我如何才能正确地关闭弹出窗口并停留在主JFrame
窗口中呢?(现在我只通过setVisible(false);
关闭它,当我在程序执行过程中多次这样做时,程序会变得非常慢)
使用
是否有其他弹出式容器的真正原因
- 使用
- 使用
JOptionPane
进行简单的用户交互
将以上两点放在一起,使用CardLayout
弹出JDialog
,并将父对象设置为JFrame
,从一张卡切换到另一张卡后,可能需要调用JDialog.pack()
只需添加以下内容:JFrame.setDefaultCloseOperation(DISPOSE\u ON\u CLOSE)
。
注意:JFrame
的默认选项是HIDE\u ON\u CLOSE
setVisible
将导致减速
dispose
将导致减速
System.exit
将关闭整个JVM
因此,您应该重用单个JFrame
或JDialog
在按钮的ActionListener
中,调用frame.setVisible(false)代码>。然后,只需执行frame.setVisible(true),而不是创建新的框架代码>。如果要更改框架的内容,可以使用函数frame.getContentPane().removeAll()
您可以使用函数dispose()
这将导致程序速度减慢,就像setVisible(false)一样
@Doorknob根据JFrame
的doc(),DISPOSE\u ON\u CLOSE
:调用任何已注册的WindowListener对象后自动隐藏和处理框架,这与hide\u ON\u CLOSE
DISPOSE并不意味着“释放资源”试着制作一个能制作成吨级JFrame
s的程序,并对其进行处理,这样会大大降低速度。@Doorknob“试着制作一个能制作成吨级JFrame
s的程序”吨数是多少?虽然我不太喜欢多个帧,但你不会注意到100个帧实例的速度会变慢(直到你关闭它们并意识到需要关闭100个实例中的每一个!)。嗯,即使我向上投票,现在我明白了……,请更改frame.removeAll()代码>到frame.getContentPane().removeAll()
我看到有几次您可以删除根窗格
,然后只保留带有工具栏的半透明窗口
,带有边框
,任何内容都没有else@MarounMaroun有关卡片布局,请参见此处和+1 mKorbel。请参阅以获取示例