将 JPanel 添加到 JFrame

问题描述 投票:0回答:6

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

java swing jframe jpanel
6个回答
19
投票
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(){
...
}

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

 }
         );
}

}

2
投票

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

public class Test2 extends JPanel {

Test2(){

...

}

更多详情:

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

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


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

你确定吗?

test
不是组件! 为了做你想做的事,你应该让
Test2
延伸
JPanel


0
投票

您的

Test2
类不是
Component
,它有一个
Component
,这是一个区别。

你要么做类似的事情

frame.add(test.getPanel() );

在您的类中为面板引入吸气剂之后,或者您确保您的

Test2
类成为
Component
(例如,通过扩展
JPanel


0
投票

眼睛 后表面模块 nodnlp 黑鬼 嘎嘎

© www.soinside.com 2019 - 2024. All rights reserved.