2009-05-26 16 views
5

Domanda piuttosto elementare qui ragazzi.Aggiunta di JPan aggiuntivi a un JPanel

Fondamentalmente ho codice come questo:

public SuperPanel() { 
    setLayout(new BorderLayout()); 
    add(panel1(), BorderLayout.NORTH); 
    add(panel2(), BorderLayout.CENTER); 
    add(panel3(), BorderLayout.SOUTH); 
} 

e che tutto funziona bene e buono. Il problema è che ho un'altra parte che desidero aggiungere al centro. Usare semplicemente add(newPanel(), BorderLayout.CENTER) non funziona, ovviamente. Ma è possibile aggiungere JPanel s in JPanel s, corretto?

così ho fatto la seguente modifica:

public SuperPanel() { 
    setLayout(new BorderLayout()); 
    add(panel1(), BorderLayout.NORTH); 
    add(supersweetpanel(), BorderLayout.CENTER); 
    add(panel3(), BorderLayout.SOUTH); 
} 

Con supersweetpanel() essere:

public JPanel supersweetpanel() { 
    JPanel sswp = new JPanel(); 
    setLayout(new BorderLayout()); 
    add(panel2(), BorderLayout.NORTH); 
    return sswp; 
} 

Ora ha la priorità panel1! Se l'ho impostato su qualsiasi altra cosa (CENTER, SOUTH, cosa hai), i primi due pannelli scompaiono completamente. L'aiuto è molto apprezzato.

risposta

13

SuperPanel è probabilmente una sottoclasse di JPanel, giusto? Si aggiunge accidentalmente panel2 a this (SuperPanel), non sswp. Prova:

public JPanel supersweetpanel() { 
     JPanel sswp = new JPanel(); 
     sswp.setLayout(new BorderLayout()); 
     sswp.add(panel2(), BorderLayout.NORTH); 
     return sswp; 
    } 
+2

+1. Deve esserlo e fornisce un buon esempio del perché l'ereditarietà può rendere le cose fragili. – Eddie

+0

Ah, era esattamente così. Bello. –

+0

Cosa disse Eddie. È un peccato che la maggior parte dei tutorial Swing (e le GUI Swing) abbiano un codice così cattivo. –