2012-05-04 17 views
8

Ich habe ein Programm, in dem ein JPanel zu einem JFrame hinzugefügt:Hinzufügen von JPanel zu 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(){ 

    ... 

    } 

} 

Ich erhalte eine Fehlermeldung frage mich Art von ‚Panel‘ auf ‚Komponente‘ zu ändern. Ich repariere diesen Fehler? Es will ich tun: Component Panel = neue Komponente();

+0

Sie müssen seit mehr Code schreiben, was posted sollten Sie – Robin

+0

JPanel eine Komponente nur Arbeit ist. Gibt der Code, den Sie gerade eingefügt haben, diesen Fehler? – Charles

+0

Es klingt wie Sie die Fehlermeldung falsch interpretieren; Was ist die * genaue * Fehlermeldung? – rob

Antwort

14
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(){ 
... 
} 
+1

Aus Neugier, gibt es einen Grund, warum Sie 'JFrame' nicht direkt in' Test' erweitert haben? Ich mache das immer, vielleicht ist es eine schlechte Angewohnheit? Upvoted. –

+2

@ Jean-FrançoisSavard Ich füge keine Funktionalität hinzu oder ändere irgendeine der existierenden Funktionen des Rahmens, also benutze ich nur eine einfache Instanz. Es ist in der Regel GUI-Builder, die Frames oder Panels erweitern (ohne guten Grund, dass ich sehen kann). –

+0

Nun, das macht Sinn, Danke für die schnelle Antwort. –

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

Sind Sie sicher davon? test ist KEINE Komponente! Um zu tun, was Sie tun möchten, sollten Sie Test2 erweitern JPanel!

0

Ihre Test2 Klasse ist kein Component, es hat eine Component, die ein Unterschied ist.

Entweder Sie tun so etwas wie

frame.add(test.getPanel()); 

, nachdem Sie einen Getter für das Panel in der Klasse eingeführt, oder stellen Sie sicher, Ihre Test2 Klasse eine Component wird (zB durch Verlängerung eines JPanel)

1

Anstatt Ihre Test2-Klasse ein JPanel zu enthalten, sollten Sie es Subklasse JPanel haben:

public class Test2 extends JPanel { 

Test2(){ 

... 

} 

Weitere Details:

JPanel ist eine Unterklasse der Komponente, so dass jede Methode, die eine Komponente als Argument kann auch eine JPanel als Argument nehmen.

Ältere Versionen ließen Sie nicht direkt zu einem JFrame hinzufügen; Sie mussten JFrame.getContentPane() verwenden. add (Komponente). Wenn Sie eine ältere Version verwenden, kann dies ebenfalls ein Problem darstellen. Neuere Versionen von Java lassen Sie JFrame.add (Component) direkt aufrufen.

2

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

} 
     ); 
} 

} 
+0

das sollte helfen. Es wirkt wie ein Zauber für mich – sabbibJAVA

Verwandte Themen