将JPanel添加到JFrame

时间:2012-05-04 19:22:12

标签: java swing jframe jpanel

我有一个程序,其中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(){

    ...

    }

}

我收到错误,要求我将'panel'的类型更改为'component'。我修复此错误? 它要我做:Component panel = new Component();

5 个答案:

答案 0 :(得分:15)

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 :(得分:3)

简单地做到

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

 }
         );
}

}

答案 2 :(得分:1)

不要让你的Test2类包含JPanel,而应该让它成为JPanel的子类:

public class Test2 extends JPanel {

Test2(){

...

}

更多详情:

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

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

答案 3 :(得分:0)

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

你确定吗? test不是组件! 要执行您要执行的操作,您应该Test2扩展JPanel

答案 4 :(得分:0)

您的Test2课程不是Component,它有一个Component,这是不同的。

你要么像

那样做
frame.add(test.getPanel() );

在您的班级中为小组引入了一个getter之后,或者确保您的Test2班级成为Component(例如通过扩展JPanel