2009-05-26 11 views
5

Bastante pregunta básica aquí chicos.Agregando JPanels adicionales a un JPanel

Básicamente tienen un código como éste:

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

Y que todo funciona bien y bueno. El problema es que tengo otra parte que deseo agregar al centro. Simplemente usando add(newPanel(), BorderLayout.CENTER) no funciona, obviamente. Pero puede agregar JPanel s en JPanel s, ¿correcto?

Hice, pues, el siguiente cambio:

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

Con supersweetpanel() ser:

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

Ahora se anula panel1! Si lo configuro para cualquier otra cosa (CENTER, SOUTH, ¿qué tiene?), Los dos primeros paneles desaparecen por completo. La ayuda es muy apreciada.

Respuesta

13

SuperPanel es probable una subclase de JPanel, ¿verdad? Está agregando accidentalmente panel2 a this (SuperPanel), no sswp. Pruebe:

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

+1. Tiene que ser así, y da un buen ejemplo de por qué el uso de la herencia puede hacer que las cosas sean frágiles. – Eddie

+0

Ah, eso fue exactamente. Encantador. –

+0

Lo que dijo Eddie. Es una pena que la mayoría de los tutoriales Swing (y las GUI Swing) tengan un código tan malo. –

Cuestiones relacionadas