我有两个单独的 JFrame,但是当我单击一个右上角的 X 时,它也会退出另一个。我在底部附近有一个“退出”按钮来执行 setVisible(false),但我仍然倾向于使用 x 按钮。我将如何使它不会取消整个项目?
另外,我将如何使第二个 JFrame 锁定在另一个 JFrame 之外,直到第二个 JFrame 关闭,就像弹出消息的工作方式一样
不要给你的 GUI 两个 JFrame。理想情况下,GUI 应该只有一个 GUI。如果需要单独的窗口,则将其设为对话框,例如 JDialog,这样就不会发生。
另外,我将如何使第二个 JFrame 锁定在另一个 JFrame 之外,直到第二个 JFrame 关闭,就像弹出消息的工作方式一样
您完美地描述了模态 JDialog 或 JOptionPane 的行为。只需使用它们。
稍后我们将讨论使用 CardLayouts 在单个 GUI 中交换视图。
编辑,你说:
我使用 Netbeans 表单编辑器更快地创建它们,但我只看到 JFrame 和 JPanel。我可以在 Netbeans 中编辑它们吗?我宁愿不从头开始 Java
您已经触及了我的另一个热心信念,这是在学习库时不使用代码生成器的另一个原因,因为人们可能会过于依赖代码生成器,这会阻止人们学习库。我强烈建议你放下你的代码生成工具,手动创建,参考教程和 API。然后,当您更熟悉该库时,请务必使用该工具。顺便说一句,这里对您的直接问题的回答是让您的 GUI 用于创建 JPanel,然后在您想要它们的位置和方式使用这些 JPanel - 在 JFrames、JDialogs 或 JOptionPanes 中,或在 CardLayouts 或 JTabbedPanes 中交换,或嵌套在其他 JPanel 中,......等等......
您应该使用模态 JDialog,而不是第二个 JFrame,因为 JDialogs 提供了某些功能,例如不向任务栏添加另一个窗口栏,并在父 JFrame 获得焦点时自动设置焦点。模态 JDialogs 在 JFrame 打开时阻止用户输入,这对于“您确定要退出吗?”很有用。对话框,例如。
至于一个 JFrame 退出另一个,您可能将它们的默认关闭操作设置为 EXIT_ON_CLOSE。如果你这样做:
jframe.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
jframe.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
handleUserWantsToCloseWindow();
}
});
然后你可以控制当用户想要关闭时会发生什么,比如弹出一个“保存更改?” 模态 JDialog 或“您确定要退出吗?” 模态 JDialog。请注意,如果使用此方法,则必须手动处理 JFrame。