所以我有2个Java类,每个类都创建一个包含各种组件的JFrame。每个类都有自己的addComponentsToPane(...)
方法,用于设置框架的内容。这用在createAndShowGui()
方法中,该方法在类的main方法中调用。
让我们称他们为A级和B级。所以事实是,在AI中有一个按钮,当点击时,启动B(简单调用B.main(null)
。我试图做什么是这样,当点击按钮时,它将打开窗口B,但如果再次点击它就不会。现在,我几乎可以通过简单地设置一个布尔值来管理这个,但问题当然是如果我点击一次,窗口就打开了,那很好......但如果我关闭窗口B并再次单击A中的相应按钮则没有任何反应......因为布尔值仍然说B是打开的。
所以我想知道的是,鉴于这种设置,有什么方法可以在B关闭时重置A中的布尔值?我在想mabe我可以用B中的WindowListener
做一些事情,但如果这是一个可能的解决方案,那么我直到找不到要配置它做什么..
答案 0 :(得分:2)
不要销毁B或将引用设置为null,只需在关闭时隐藏它。您可以在应用程序启动时隐藏它,也可以只按A来按需创建它。
A.Button然后调用 - > B.show()。
如果B是JFrame(它可能应该是),您可以通过调用JFrame.setDefaultCloseOperation()
来设置关闭“X”的行为。默认值应为WindowConstants.HIDE_ON_CLOSE
。
答案 1 :(得分:1)
基本上你需要做的是将一个Frame作为你的“主”框架,这意味着它包含主要方法。在你的情况下,这将是你的框架A.然后使框架B(而不是使用JDialog而不是JFrame)框架A的一部分。
类似的东西:
public MainApp extends JFrame { // Frame A
...
private static CustomWindowB FrameB = null;
...
public static void main(String[] args){
super();
FrameB = new CustomWindowB(...);
...
}
...
public void FunctionCalledByButtonClick(){
if(FrameB == null){
FrameB = new CustomWindowB(...);
} else {
if(FrameB.isVisible()){
FrameB.hide();
} else {
FrameB.show();
}
}
}
}
对于B你可以这样做:
public CustomWindowB extends JDialog { // Frame B
public CustomWindowB(...){
super();
...
this.setVisible(true);
}
public void hide(){
this.setVisisble(false);
}
public void show(){
this.setVisisble(true);
}
}