webentwicklung-frage-antwort-db.com.de

JPanel zu JFrame hinzufügen

Ich habe ein Programm, in dem ein JPanel zu einem JFrame hinzugefügt wird:

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

    ...

    }

}

Es wird eine Fehlermeldung angezeigt, in der ich aufgefordert wird, den Typ "Panel" in "Komponente" zu ändern. Behebe ich diesen Fehler? Ich möchte Folgendes tun: Komponentenbereich = neue Komponente ();

8
Anonymous181
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(){
...
}
15
Andrew Thompson

mach es einfach

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

 }
         );
}

}
3
sabbibJAVA

Anstatt dass Ihre Test2-Klasse ein JPanel enthält, sollten Sie eine Unterklasse JPanel haben:

public class Test2 extends JPanel {

Test2(){

...

}

Mehr Details:

JPanel ist eine Unterklasse von Component. Daher kann jede Methode, die eine Komponente als Argument verwendet, auch ein JPanel als Argument verwenden.

Ältere Versionen haben Sie nicht direkt zu einem JFrame hinzufügen können. Sie mussten JFrame.getContentPane (). add (Component) verwenden. Wenn Sie eine ältere Version verwenden, kann dies ebenfalls ein Problem sein. Mit neueren Java-Versionen können Sie JFrame.add (Component) direkt aufrufen.

1
rob
Test2 test = new Test2();
...
frame.add(test, BorderLayout.CENTER);

Bist du dir sicher? test ist KEINE Komponente! Um zu tun, was Sie versuchen, sollten Sie Test2JPanel erweitern!

0
StepTNT

Ihre Test2-Klasse ist keine Component, sie hat eine Component, die einen Unterschied darstellt.

Entweder machst du sowas

frame.add(test.getPanel() );

nachdem Sie einen Getter für das Panel in Ihrer Klasse eingeführt haben oder Sie sicherstellen, dass Ihre Test2-Klasse eine Component wird (z. B. durch Erweitern einer JPanel)

0
Robin