JPFrameを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
を拡張することにより)