2012-05-04 210 views
8

我在一個JPanel添加到JFrame中的程序:添加的JPanel到JFrame中

public class Test{ 

    Test2 test = new Test2(); 
    JFrame frame = new JFrame(); 

    Test(){ 

    ... 
    frame.setLayout(new BorderLayout()); 
    frame.add(test, BorderLayout.CENTER); 
    ... 

    } 

    //main 

    ... 

    } 

    public class Test2{ 

    JPanel test2 = new JPanel(); 

    Test2(){ 

    ... 

    } 

} 

我得到一個錯誤,要求我改「面板」到「組件」的類型。我該如何解決這個錯誤? 它希望我這樣做:組件面板=新的組件();

+0

需要,因爲你貼什麼應該只是工作 – Robin

+0

JPanel是組件發佈更多的代碼。你剛剛粘貼的代碼是否會給你這個錯誤? – Charles

+0

這聽起來像是你誤解了錯誤信息;什麼是*確切*錯誤信息? – rob

回答

14
public class Test{ 

Test2 test = new Test2(); 
JFrame frame = new JFrame(); 

Test(){ 
... 
frame.setLayout(new BorderLayout()); 
frame.add(test, BorderLayout.CENTER); 
... 
} 

//main 
... 
} 

//public class Test2{ 
public class Test2 extends JPanel { 

//JPanel test2 = new JPanel(); 

Test2(){ 
... 
} 
+1

好奇心,有沒有一個原因,你沒有直接在'Test'中擴展'JFrame'?我總是這樣做,也許這是一個壞習慣? Upvoted。 –

+2

@ Jean-FrançoisSavard我沒有添加任何功能或改變框架的任何現有功能,所以我只是使用普通的實例。它通常是鼓勵擴展框架或面板的GUI構建器(因爲我看不到)。 –

+0

那麼有道理,謝謝你的快速回答。 –

0
Test2 test = new Test2(); 
... 
frame.add(test, BorderLayout.CENTER); 

你確定這是嗎? test不是一個組件! 要做你想做的事情,你應該讓Test2延伸JPanel

0

您的Test2類不是Component,它有一個Component這是一個區別。

要麼你做這樣的事情

frame.add(test.getPanel()); 

您介紹後你們班面板吸氣,或者你要確保你的Test2類成爲一個Component(例如,通過延伸的JPanel

1

而不是讓您的Test2類包含一個JPanel,你應該有它的子類JPanel:

public class Test2 extends JPanel { 

Test2(){ 

... 

} 

更多細節:

JPanel是組件的一個子類,因此,需要一個組件作爲參數也可以採取一個JPanel作爲參數的任何方法。

舊版本不讓您直接添加到JFrame;你必須使用JFrame.getContentPane()。add(Component)。如果您使用的是舊版本,這可能也是一個問題。較新版本的Java可讓您直接調用JFrame.add(Component)。

2

這樣做只是

public class Test{ 
    public Test(){ 
     design(); 
    }//end Test() 

public void design(){ 
    JFame f = new JFrame(); 
    f.setSize(int w, int h); 
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    f.setVisible(true); 
    JPanel p = new JPanel(); 
    f.getContentPane().add(p); 
} 

public static void main(String[] args){ 
    EventQueue.invokeLater(new Runnable(){ 
    public void run(){ 
     try{ 
      new Test(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

} 
     ); 
} 

} 
+0

這應該有所幫助。它對我來說就像一個魅力 – sabbibJAVA