2011-01-20 24 views
8

Tengo un problema con un JPanel dentro de otra. No sé por qué, pero el resultado es un cuadrado simple, pero las dimensiones no son correctas. ¿Porqué es eso?JPanel dentro de otra

import java.awt.Color; 
import java.awt.Container; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class jj extends JFrame { 

    private JPanel painel3; 
    private JPanel painel5; 
    private Container container; 

    public jj() { 

     container = getContentPane(); 
     container.setLayout(null); 

     painel5 = new JPanel(); 
     painel5.setBackground(Color.red); 
     painel5.setBounds(120, 110, 100, 120); 
     painel3 = new JPanel(); 
     painel3.setBackground(Color.white); 
     painel3.add(painel5); 
     painel3.setBounds(50, 50, 290, 220); 

     container.add(painel3); 

     // frame 
     setSize(1000, 900); 
     setLocation(200, 50); 
     setResizable(false); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    public static void main(String[] args) { 
     new jj(); 
    } 
} 

Respuesta

5

Es necesario configurar el diseño de panel3 también a NULL en otro caso se utiliza el valor por defecto FlowLayout:

panel3.setLayout(null);

+1

Añadiendo 'painel3.setlayout (null);' funcionó cuando probé su código. – Puddingfox

2

Incluso mejor, aunque es evitar el uso de diseños nulos y setBounds/setSize sino deje que los administradores de diseño lo ayuden a diseñar su GUI. Puede leer sobre ellos aquí: Laying out components in a container

3

Un par de recomendaciones adicionales. Aprende a usar LayoutManagers. Pueden tener una ligera curva de aprendizaje, pero definitivamente valdrá la pena. Buen tutorial: http://download.oracle.com/javase/tutorial/uiswing/layout/using.html

También de acuerdo con los estándares de Java, los nombres de las clases deben comenzar con una letra mayúscula. Hacer esto ayudará a otros a leer mejor su código.

+1

+1 Usar LayoutManagers es una buena recomendación. – Jonas

+0

cambié mi diseño a gridlayout – anvd

+0

@Fel que es excelente – jzd

0

Establezca el diseño de painel3 en nulo antes de agregar el panel painel5.

painel3.setLayout (null); painel3.add (painel5);

Recomiendo usar LayoutManagers.