2009-05-26 10 views
5

Question plutôt basique ici les gars.Ajout de JPanels supplémentaires à un JPanel

Fondamentalement, j'ai le code comme ceci:

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

Et que tout fonctionne bien et bon. Le problème est que j'ai une autre partie que je souhaite ajouter au centre. Juste en utilisant add(newPanel(), BorderLayout.CENTER) ne fonctionne pas, évidemment. Mais vous pouvez ajouter JPanel s dans JPanel s, correct?

Je fait le changement suivant:

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

Avec supersweetpanel() être:

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

Maintenant, il remplace panel1! Si je le mets à autre chose (CENTER, SOUTH, qu'avez-vous), les deux premiers panneaux disparaissent entièrement. L'aide est très appréciée.

Répondre

13

SuperPanel est probablement une sous-classe de JPanel, non? Vous ajoutez accidentellement panel2 à this (le SuperPanel), pas sswp. Essayez:

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

+1. Ça doit être ça, et ça donne un bon exemple de pourquoi l'utilisation de l'héritage peut rendre les choses fragiles. – Eddie

+0

Ah, c'était exactement ça. Charmant. –

+0

Ce que dit Eddie. Il est dommage que la plupart des tutoriels Swing (et les interfaces graphiques de Swing) aient un tel mauvais code. –

Questions connexes