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