gpt4 book ai didi

java - 当我关闭 jCheckBox 的子框架时,如何自动取消选中(取消勾选) jCheckBox?

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:32 27 4
gpt4 key购买 nike

我正在开发一个 Java 应用程序。主类框架名称为“a”。在框架“a”中,有一个组件 - jCheckBox。因此,当我检查(勾选)这个 jCheckBox 时,它会打开另一个框架“b”。我想在关闭框架“b”时取消选中 jCheckBox,但似乎无法工作。知道如何解决这个问题吗?谢谢。

编辑:但是,我可以通过取消选中框架a(在主类框架中)中的jCheckBox来关闭框架“b”。我想要实现的是当我关闭框架“b”时,它应该自动取消选中框架“a”中的jCheckBox。编译应用程序后,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)

最佳答案

In frame A, I did make a public access to class b. Code --> public b frameInfo = new b(); While in frame B, I did make the similar call back to class a. Code --> public a frameMain = new a(); I am trying to make the application automatically uncheck jCheckBoxInfo in frame a.

那个new a()就是问题所在;您不是取消选中现有框架中的框,而是创建一个新窗口并在那里取消选中它(这反过来会导致创建无限多个窗口;或者更确切地说,直到堆栈溢出)。

相反,您可以:

  1. a 中添加 WindowListener(可能使用匿名内部类,扩展 WindowAdapter),而不是在 b 中。然后您可以直接引用windowClosing()中的复选框。这可能是最简洁的方法,因为它避免了将 ba 绑定(bind)得过于紧密,并且将可见性处理完全保留在 a 中。
  2. 如果 b 框架是一个以 a 作为父窗口的对话框,您可以使用 getOwner() 获取所有者窗口,将其转换为 a 并取消选中那里的复选框。
  3. 如果没有所有者窗口(在这种情况下请参阅 about using multiple frames ),您可以将 a 实例传递给 b,例如作为构造函数参数:

    class b {
    final a parent;
    public b(a parent) {
    this.parent = parent;
    ...
    }
    }

    然后您可以使用parent引用取消选中该复选框。

  4. 如果 ba 的内部类,则它具有对封闭对象的隐式引用,并且可以将其引用为 a.this

无论如何,请使用对创建 b 的现有 a 的引用,而不是在 b 中创建新的 a

关于java - 当我关闭 jCheckBox 的子框架时,如何自动取消选中(取消勾选) jCheckBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30060255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com