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 ();
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(){
...
}
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();
}
}
);
}
}
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.
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 Test2
JPanel
erweitern!
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
)