所以我有两个Java类,每个类都创建一个包含各种组件的JFrame。每个类都有自己的addComponentsToPane(...)
方法,用于设置框架的内容。这在类的主方法中调用的CCD_ 2方法中使用。
让我们把它们称为A类和B类。所以问题是,在A中,我有一个按钮,当点击时,发射B(B.main(null)
的简单调用。我想做的是,使其在单击按钮时打开窗口B,但如果再次单击,则不会。现在,我几乎可以通过设置布尔值来很好地管理这一点,但问题当然是,如果我单击一次,窗口就会打开,这很好…但如果我关闭窗口B并再次单击a中的相应按钮,则不会发生任何事情…因为布尔值仍然表示B是开的。
所以我想知道的是,在这种设置下,当B关闭时,有没有办法重置a中的布尔值?我在想也许我可以用B中的WindowListener
做点什么,但如果这是一个可能的解决方案,那么我还没有弄清楚该如何配置它。
不要破坏B或将引用设置为null,只需在关闭时隐藏它。您可以在应用程序启动时隐藏创建它,也可以从A.按需创建它
A.按钮然后调用-->B.显示().
如果B是JFrame(它可能应该是),您可以通过调用JFrame.setDefaultCloseOperation()
来设置正在单击的关闭"X"的行为。默认值应该已经是WindowConstants.HIDE_ON_CLOSE
。
基本上,您要做的是使一个Frame成为您的"主"框架,这意味着它包含main方法。在您的情况下,这将是您的帧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);
}
}