2012-05-04 12 views
8

Ho un programma in cui si aggiunge un JPanel ad un JFrame:Aggiunta JPanel JFrame a

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

    ... 

    } 

} 

ottengo un errore che mi chiedeva di cambiare il tipo di 'panel' a 'componenti'. Devo correggere questo errore? Vuole che lo faccia: Component panel = new Component();

+0

devi inviare più codice dal momento che ciò che hai postato dovrebbe funzionare – Robin

+0

JPanel è un componente. Il codice che hai appena incollato ti dà quell'errore? – Charles

+0

Sembra che tu stia interpretando erroneamente il messaggio di errore; Qual è il messaggio di errore esatto? – rob

risposta

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

Per curiosità, c'è un motivo per cui non hai esteso 'JFrame' direttamente in' Test'? Lo faccio sempre, forse è una cattiva abitudine? Upvoted. –

+2

@ Jean-FrançoisSavard Non sto aggiungendo alcuna funzionalità o modificando alcuna funzionalità esistente del frame, quindi uso solo un'istanza semplice. Generalmente i costruttori di GUI incoraggiano l'estensione di frame o pannelli (senza una buona ragione che io possa vedere). –

+0

Beh, questo ha un senso, grazie per la risposta veloce. –

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

Sei sicuro di questo? test NON è un componente! Per fare quello che stai cercando di fare si dovrebbe lasciare Test2 estendere JPanel!

0

La tua classe Test2 non è una Component, ha una Component che è una differenza.

o si fa qualcosa di simile

frame.add(test.getPanel()); 

dopo aver introdotto un getter per il pannello nella tua classe, o è assicurarsi che la classe Test2 diventa un Component (ad esempio estendendo un JPanel)

1

Invece di avere la classe Test2 contengono un JPanel, si dovrebbe avere sottoclasse JPanel:

public class Test2 extends JPanel { 

Test2(){ 

... 

} 

Maggiori dettagli:

JPanel è una sottoclasse del componente, in modo che qualsiasi metodo che accetta un componente come un argomento può anche prendere un JPanel come argomento.

Le versioni precedenti non consentivano di aggiungere direttamente a JFrame; dovevi usare JFrame.getContentPane(). add (Component). Se stai utilizzando una versione precedente, questo potrebbe anche essere un problema. Le versioni più recenti di Java ti consentono di chiamare direttamente JFrame.add (Component).

2

lo fanno semplicemente

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

questo dovrebbe aiutare. funziona come un fascino per me – sabbibJAVA