2012-09-05 22 views
10

Duplicar posibles:
Swing: How do I set a component height to the container's height?¿Cómo puedo dividir JPanel en el 70% al 30%

¿Cómo puedo dividir JPanel como la imagen se muestra a continuación hay 2 paneles panel1 y panel2 panel1 debería tomar 70% y panel2 30% o panel1 debería ser más grande que panel2 ... He intentado con Gridlayout, diseño de bordes pero no funciona. Cualquier ayuda sería apreciada.

public class TestApplication extends JApplet { 

private static final long serialVersionUID = 1L; 

    JPanel p1,p2; 

    public void init(){   
     setLayout(new GridLayout(3,1)); 
     p1=new JPanel(); 
     p2=new JPanel(); 

     p1.setBackground(Color.RED); 
     p2.setBackground(Color.GREEN); 

     add(p1); 
     add(p2); 
    } 
} 

enter image description here

+2

imagen cargada fue creado en pintura :) – madhur

+0

buena pregunta 1 – mKorbel

+2

Uso GridBagLayout y el uso de peso = 0,7 y 0,3, respectivamente –

Respuesta

14

Ha considerado el uso de un JSplitPane (How to Use Split Panes)?

import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.JApplet; 
import javax.swing.JPanel; 
import javax.swing.JSplitPane; 

public class TestApplication extends JApplet { 

private static final long serialVersionUID = 1L; 

    JPanel p1,p2; 

    @Override 
    public void init(){   
     setLayout(new BorderLayout()); 

     p1=new JPanel(); 
     p2=new JPanel(); 

     p1.setBackground(Color.RED); 
     p2.setBackground(Color.GREEN); 
     JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
     sp.setResizeWeight(0.7); 
     sp.setEnabled(false); 
     sp.setDividerSize(0); 

     sp.add(p1); 
     sp.add(p2); 
     add(sp, BorderLayout.CENTER); 
    } 
} 

enter image description here

+0

GrahamA Gracias mucho ... :) – madhur

1

Si usted tiene un JFrame externa (u otro JPanel) f, se puede aplicar un BorderLayout y poner en p1 y p2 NORTE en el sur. Luego, usando

Dimension df = f.getSize(); 

Obtendrá la dimensión del contenedor externo (f). A continuación, llamar a:

void setSize(Dimension d) 

esta manera:

p1.setSize(new Dimension(df.getWidth(), df.getHeight()*0.7)); 
p2.setSize(new Dimension(df.getWidth(), df.getHeight()*0.3)); 

Por último, añadir estos JPanels a su contenedor.

+0

Si utiliza un LayoutManager, nunca se debe llamar setSize. Utilice las restricciones de LayoutManager y, como último recurso, puede forzar el tamaño de pref/min/max o usar el diseño absoluto ('null'-layout) e invocar setBounds/setLocation/setSize usted mismo. Mezclar ambos en el mismo contenedor solo busca problemas. –