2014-02-08 66 views
1

在我的問題中,這是Refectoring Class。在本課中,我使用JPanel通過單獨的方法panel()添加按鈕,並在RefectClass Constactor中調用。如何在框架中添加JPanel

public class RefectClass extends JFrame { 
    JButton btnHome,btnBack; 
    JPanel btnContainer; 

    public RefectClass(){ 
     super("Title Here"); 
     setSize(350,300); 
     add(this.panel(),BorderLayout.CENTER); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public void panel(){ 

     btnContainer=new JPanel(); 
     btnHome=new JButton("Home"); 
     btnBack=new JButton("Back"); 

     btnContainer.add(btnHome); 
     btnContainer.add(btnBack); 

    } 

} 

現在如何將面板添加到JFrame?它會給出錯誤,當我嘗試使用它時。我無法使用panel() Mehtod。

+1

始終複製/粘貼錯誤和異常輸出。 –

回答

1

所以你不能寫

附加(this.panel(),BorderLayout.CENTER)您的面板()方法不返回任何東西;

嘗試

this.panel(); 
add(this.btnContainer,BorderLayout.CENTER); 
+0

Thanx現在的代碼工作請解釋這些語句,上面再次提到you.thanx again – Zu007

+0

在您的面板方法中,您正在設置實例字段btnContainer。只有在執行panel()之後,纔可以將該字段添加到框架。請注意,它可能是一個更優雅的解決方案,從其他人建議的方法返回該字段... – Balder

2

你的面板()方法返回void - 它應該返回新創建的JPanel,而不是這樣的,你可以把它添加到JFrame:

public JPanel panel(){ 

    btnContainer=new JPanel(); 
    btnHome=new JButton("Home"); 
    btnBack=new JButton("Back"); 

    btnContainer.add(btnHome); 
    btnContainer.add(btnBack); 
    return btnContainer; 

} 

讓我點儘管如此,這是一種非常不尋常的方法。當方法實際上只需要在類內部時,您不必在公共方法中初始化成員,該方法返回新初始化的成員。設想一個客戶從外面多次調用面板方法(因爲它是公開的)。 BtnContainer,btnHOme和BtnBack將被覆蓋,但它們不會出現在屏幕上。 該方法看起來很神奇 - 爲什麼不直接將它包含在構造函數中呢? 或至少使方法private

+0

因爲我正在學生表單的Interafce(在JDBC中)只有Swing推回我所有的工作已經完成了。 – Zu007