我正在开发一个Java应用程序。主类框架名称为" a"。在框架" a"中,有一个组件--jCheckBox。因此,当我检查(勾选)此jCheckBox时,它会打开另一个框架" b"。当我关闭框架" b"时,我想解开jCheckBox,但似乎无法工作。不知道怎么解决这个问题?谢谢。
编辑:但是,我可以关闭框架" b"通过取消框架a中的jCheckBox(在主类框架中)。我想要实现的是当我关闭框架" b"时,它应该自动取消选中框架中的jCheckBox" a"。在编译我的应用程序后,IDE向我显示了很多错误。
我的代码: (在主框架A中)
private void jCheckBoxInfoActionPerformed(java.awt.event.ActionEvent evt) {
if (jCheckBoxInfo.isSelected()) {
System.err.println("Frame B is opened");
b.setVisible(true);
} else {
System.err.println("Frame B is closed");
frameInfo.setVisible(false);
}
}
在第B栏:
private void formWindowClosing(java.awt.event.WindowEvent evt) {
boolean selected = a.jCheckBoxInfo.isSelected();
System.err.println(selected); //To check the status of jCheckBoxInfo
a.jCheckBoxInfo.setSelected(false); }
输出
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Win32GraphicsConfig.java:222)
at java.awt.Window.init(Window.java:505)
at java.awt.Window.<init>(Window.java:537)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:189)
at b.<init>(b.java:30)
at a.<init>(a.java:36)
at b.<init>(b.java:26)
at a.<init>(a.java:36)
答案 0 :(得分:0)
在第A帧中,我确实公开访问了b类。代码 - &gt; public b frameInfo = new b();在B帧中,我确实将类似的调用回到了a类。代码 - &gt; public a frameMain = new a();我试图让应用程序在框架a中自动取消选中jCheckBoxInfo。
new a()
是问题所在;你没有取消选中现有框架中的框,而是创建一个新窗口并在那里取消选中(这反过来导致更多窗口被创建为无限远;或者更确切地说,直到堆栈溢出)。
相反,您可以:
WindowListener
中添加a
(可能使用匿名内部类,扩展WindowAdapter
),而不是b
。然后,您可以直接参考windowClosing()
中的复选框。这可能是最干净的方法,因为它避免了b
比a
更紧密地绑定a
,并且在b
中完全保持可见性处理。a
框架是一个以getOwner()
为父窗口的对话框,您可以使用a
获取所有者窗口,将其投放到a
并取消勾选复选框那里。如果没有所有者窗口(在这种情况下请参见about using multiple frames),您可以将b
实例传递给class b {
final a parent;
public b(a parent) {
this.parent = parent;
...
}
}
,例如作为构造函数参数:
parent
然后您可以使用b
参考取消选中该复选框。
a
是a.this
的内部类,则它具有对封闭对象的隐式引用,可以称为a
。在任何情况下,请使用对现有b
的引用,您在其中创建a
,而不是在b
中创建新的port 68 or 67
。