11

我有一个将 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(){

    ...

    }

}

我收到一个错误,要求我将“面板”类型更改为“组件”。我要修复这个错误吗?它要我做: Component panel = new Component();

4

5 回答 5

18
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(){
...
}
于 2012-05-04T19:28:23.193 回答
4

简单地做

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();
         }

 }
         );
}

}
于 2012-07-28T19:42:17.930 回答
1

与其让您的 Test2 类包含 JPanel,不如让它成为 JPanel 的子类:

public class Test2 extends JPanel {

Test2(){

...

}

更多细节:

JPanel是 Component 的子类,因此任何将 Component 作为参数的方法也可以将 JPanel 作为参数。

旧版本不允许您直接添加到 JFrame;你必须使用 JFrame.getContentPane().add(Component)。如果您使用的是旧版本,这也可能是一个问题。较新版本的 Java 允许您直接调用 JFrame.add(Component)。

于 2012-05-04T19:28:36.253 回答
0
Test2 test = new Test2();
...
frame.add(test, BorderLayout.CENTER);

你确定吗?test不是一个组件!要做你想做的事,你应该让Test2extend JPanel

于 2012-05-04T19:27:59.457 回答
0

你的Test2课程不是 a Component,它有 a Componentwhich is a difference。

要么你做类似的事情

frame.add(test.getPanel() );

在您为班级中的面板引入吸气剂之后,或者您确保您的Test2班级成为 a Component(例如,通过扩展 a JPanel

于 2012-05-04T19:28:00.933 回答