簡體   English   中英

將JPanel添加到JFrame

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM