Java Swing "children" 窗口

7

非常抱歉,我有一个非常简单的问题,但是我在网上找不到任何东西,可能是因为我不知道要查找的正确术语。

当您拥有桌面应用程序时,有许多所谓的子窗口:一个用于选项,一个用于“关于”等等。如何在Java Swing中制作它们(使用NetBeans工具 - 可选)?

到目前为止,我只是创建了另一个JFrame,并在相关事件上以与主函数启动相同的方式打开它,好吧,主JFrame。但是这种方法存在问题:当我通过右上角的x关闭子窗口时,整个程序终止,就好像我正在关闭主窗口一样。这可能是因为NetBeans自动生成x的代码,我可以在某个地方找到并更改它...但我仍然感觉必须有更简单适当的方法添加子JFrames(或JPanel或任何用于子窗口的内容);)

4个回答

10

...但是这种方法存在问题:当我通过右上角的x关闭子窗口时,整个程序会终止,好像我正在关闭主窗口一样...

好的,我认为你走在正确的道路上。只需确保对于子框架执行以下操作:

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

那么关闭子窗口不会关闭你的整个应用程序。

希望这有帮助!;-)


4

您是指对话框窗口(请参见如何创建对话框),您可能希望将其设置为模态,以阻止程序中所有其他窗口的用户输入(请参见对话框概述)?


不完全是。我的意思是像选项窗口那样的东西。即Firefox首选项窗口。除非它也被称为对话框窗口。 - Sejanus

1

如果您创建框架,则它们不被视为子窗口。您无法像JDialog一样为它们设置所有者。如果您确实想创建另一个JFrame,则必须设置关闭操作。

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

而不是

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

EXIT_ON_CLOSE操作将调用System.exit(0);来终止JVM。只需记住,如果您的主JFrame设置为DISPOSE_ON_CLOSE,则必须确保所有其他框架已经被正确处理,否则它不会退出直到它们被处理。


谢谢你们所有人;)太遗憾了,我只能正式接受一个答案,但是它们都很有帮助:) - Sejanus

1

进入框架设计模式 -> 选择您的框架 -> 在属性中,第一个选项。选择关闭时处理

如果您没有看到属性:Ctrl + Shift + 7窗口(在框架菜单中) -> 属性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接