11

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(){

    ...

    }

}

「パネル」のタイプを「コンポーネント」に変更するように求めるエラーが表示されます。このエラーを修正しますか? コンポーネント パネル = new コンポーネント();

4

5 に答える 5

18
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(){
...
}
于 2012-05-04T19:28:23.193 に答える
4

do it simply

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

 }
         );
}

}
于 2012-07-28T19:42:17.930 に答える
1

Test2 クラスに JPanel を含める代わりに、JPanel をサブクラス化する必要があります。

public class Test2 extends JPanel {

Test2(){

...

}

詳細:

JPanelは Component のサブクラスであるため、Component を引数として取るメソッドは、JPanel も引数として取ることができます。

古いバージョンでは、JFrame に直接追加できませんでした。JFrame.getContentPane().add(Component) を使用する必要がありました。古いバージョンを使用している場合、これも問題になる可能性があります。Java の新しいバージョンでは、JFrame.add(Component) を直接呼び出すことができます。

于 2012-05-04T19:28:36.253 に答える
0
Test2 test = new Test2();
...
frame.add(test, BorderLayout.CENTER);

これでよろしいですか?testはコンポーネントではありません! あなたがやろうとしていることをするためには、Test2拡張させてくださいJPanel

于 2012-05-04T19:27:59.457 に答える
0

あなたのTest2クラスは ではありませんComponentComponent違いは です。

あなたは次のようなことをしますか

frame.add(test.getPanel() );

クラスにパネルのゲッターを導入した後、またはTest2クラスが になることを確認した後Component(たとえば、 a を拡張することによってJPanel)

于 2012-05-04T19:28:00.933 に答える