我有一个程序,其中将 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();
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
)
眼睛 后表面模块 nodnlp 黑鬼 嘎嘎