2013-04-05 71 views
1

我有兩個框架,我想單擊frame2中的按鈕,並且禁用frame1中的按鈕。這可能嗎?程序從frame1開始執行並打開frame2。從這個frame2中我想禁用frame1中的那個按鈕但是它不起作用.....怎麼可以做到?幀可以訪問另一個幀的按鈕/組件嗎?

附加信息:當我使用面板時,也有類似的問題。我只是不明白。 Plz幫助!

這裏是幀1編碼在程序開始執行:

public class Frame1 extends javax.swing.JFrame { 

Frame2 frm2 = new Frame2();  

public Frame1() { 
    initComponents();   
}  

public void buttonDisable(){ 
    Btn1.setEnabled(false); 
} 
private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {          
    frm2.setVisible(true); 
}          

public static void main(String args[]) { 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new Frame1().setVisible(true); 
     } 
    }); 
} 

public javax.swing.JButton Btn1; 

} 

這裏就是我想禁用按鈕從幀2編碼:

public class Frame2 extends javax.swing.JFrame { 

public Frame2() { 
    initComponents(); 
}      

private void Btn2ActionPerformed(java.awt.event.ActionEvent evt) {          
    Frame1 frm1 = new Frame1(); 
    frm1.buttonDisable(); 
}          

public static void main(String args[]) { 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new Frame2().setVisible(true); 
     } 
    }); 
} 

public javax.swing.JButton Btn2; 

} 
+1

應用程序應該只有一個JFrame。請參閱:http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice。使frame2成爲一個模型JDialog,那麼你不必擔心禁用按鈕。 – camickr 2013-04-05 19:51:14

+0

謝謝,我不太清楚Dialog的工作是如何的,但我仔細研究了一下,現在我將用它來達到這樣的目的:) – Anafam 2013-04-12 12:41:03

回答

3

這是很簡單的,你的抽象會工作得很好。這是一個基本的方式來實現你想要什麼:

class FrameTwo extends JFrame { 
    private FramOne firstFrame; 

    public FrameTwo(FrameOne firstFrame) { 
     this.firstFrame = firstFrame; 
    }; 

    public void doSomething() { 
     System.out.println(this.firstFrame.someMethod()); 
    }; 
}; 

基本上我傳遞FrameOne類的實例給FrameTwo構造。有幾個選項可以實現這一點,使用靜態成員,使用兩個框架作爲某些類的實例,使用抽象等。您的問題很簡單,可能更多地閱讀這些內容。

此外,請注意,您可以將import javax.swing.Frame添加到文件頂部,然後您只需鍵入class FrameOne extends Frame而不是class FrameOne extends javax.swing.Frame;

最重要的

這是非常罕見的,強烈勸阻使用多幀的同一個應用程序。我會考慮創建使用JPanel嵌套元素的視圖,然後您可以在同一個框架內切換面板和對話框。

+0

我不確定FrameOne的外觀如何,你可以添加FrameOne類你的代碼?我使用Netbeans做到了這一點,因此它可以即時添加進口。是的,我是一個新的Java學習者,但不錯。這只是一個簡單的編碼,以瞭解我做錯了什麼。 – Anafam 2013-04-05 20:06:49

+0

是啊,其實我在我的應用程序中使用了所有的面板,但我只有這個小的登錄屏幕,它在單獨的JFrame中打開。該登錄屏幕是使用文件菜單進行訪問的,該文件菜單是用於顯示所有其他面板的單個Jframe的一部分:) – Anafam 2013-04-05 20:11:52

+0

雖然技術上正確,但它具有將第一幀暴露給第二幀的副作用。這允許第二幀能夠更改第一幀,這可能不是你想要的。你可以看看[this](http://stackoverflow.com/questions/15826951/how-to-change-setindeterminate-jprogressbar-in-other-frame/15827130#15827130),它討論了一個相似的問題 – MadProgrammer 2013-04-06 02:28:29