我正在研究Java應用程序。主類框架名稱爲「a」。在框架「a」中,有一個組件 - jCheckBox。所以當我檢查(勾選)這個jCheckBox時,它會打開另一個框架「b」。我想在關閉frame「b」時去掉jCheckBox,但它看起來像不能工作。任何想法如何解決這個問題?謝謝。如何在關閉子框架時自動取消選中(取消選中)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)
堆棧跟蹤看起來像是從'a'構造函數(或等價物)創建'b'實例,反之亦然=>堆棧溢出。 – kiheru
這是正確的。當我點擊關閉的「X」按鈕時發生 - 關閉框架B的窗口。 –
問題是*爲什麼*你會從'b'創建更多'a'實例。問題是相互遞歸的對象構造。只需保留對現有框架的引用。 – kiheru