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