[英]Adding JPanel to 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(){
...
}
}
我收到一個錯誤,要求我將“面板”的類型更改為“組件”。 我要解決此錯誤嗎? 它要我做:組件面板= new Component();
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(){
...
}
簡單地做
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();
}
}
);
}
}
而不是讓Test2類包含JPanel,應該讓它成為JPanel的子類:
public class Test2 extends JPanel {
Test2(){
...
}
更多細節:
JPanel是Component的子類,因此任何將Component作為參數的方法也可以將JPanel作為參數。
較舊的版本不允許您直接添加到JFrame。 您必須使用JFrame.getContentPane()。add(Component)。 如果您使用的是舊版本,則這可能也是一個問題。 較新版本的Java確實允許您直接調用JFrame.add(Component)。
Test2 test = new Test2();
...
frame.add(test, BorderLayout.CENTER);
你確定嗎? test
不是組件! 做您想做的事情,應該讓Test2
擴展JPanel
!
您的Test2
類不是Component
,它的Component
有所不同。
你要么做類似
frame.add(test.getPanel() );
在為類中的面板引入吸氣劑之后,或者確保您的Test2
類成為Component
(例如,通過擴展JPanel
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.