2010-11-22 35 views
6

Tengo tres JPanels pintados en un JFrame. Actualmente, están configurados para usar el FlowLayout predeterminado. Me gustaría que estos sean uno encima del otro en una sola columna.Java Swing: FlowLayout ¿Los JPanels están sentados uno al lado del otro?

Sin embargo, estoy descubriendo que estos están flotando uno al lado del otro en la misma línea, siempre y cuando los componentes dentro de ellos.

¿El ancho natural de un FlowLayout JPanel es la suma de su contenido? Si es así, ¿hay alguna forma de forzar el ancho de la región para que sea el ancho del JFrame?

Curiosamente, estoy descubriendo que, si los paneles "superior" e "inferior" tienen contenido que abarca todo el ancho del JFrame, y el panel "medio" se deja vacío, el panel "medio" crea un el espacio entre los dos, al igual que el viejo "

de html.

Gracias,

Ben

Respuesta

1

puede utilizar GridLayout para crear YxZ rejilla en un componente. para construir el diseño con mayor precisión se puede utilizar GridBagLayout que proporciona el control total de po posicionamiento y dimensionamiento para componentes anidados.

0

Siempre estoy con NetBeans. Desde entonces, puedo hacer Free Design sin tener problemas para colocar los componentes en JPanel o JFrame :) Puede considerarlo.

2

Si desea crear un diseño vertical, es posible que desee considerar el uso de BoxLayout para el contenedor adjunto. Esto se puede establecer en componentes de disposición a lo largo del eje y.

4

Como dijo Jim, BoxLayout es la elección correcta si necesita alinear linealmente los componentes.

Aquí se muestra un ejemplo:

import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** 
* 
* @author nicholasdunn 
*/ 
public class BoxLayoutExample extends JPanel { 

    public BoxLayoutExample() { 
     JPanel topPanel = new JPanel(); 
     JPanel middlePanel = new JPanel(); 
     JPanel bottomPanel = new JPanel(); 

     topPanel.setBorder(BorderFactory.createEtchedBorder()); 
     middlePanel.setBorder(BorderFactory.createEtchedBorder()); 
     bottomPanel.setBorder(BorderFactory.createEtchedBorder()); 

     topPanel.add(new JLabel("Top")); 
     middlePanel.add(new JLabel("Middle")); 
     bottomPanel.add(new JLabel("Bottom")); 

     BoxLayout boxLayout = new BoxLayout(this, BoxLayout.PAGE_AXIS); 
     setLayout(boxLayout); 
     add(topPanel); 
     add(middlePanel); 
     add(bottomPanel); 

    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(""); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new BoxLayoutExample(); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

alt text

Usted haría bien en leer a través de la realidad introduction to layout managers para entender el conjunto base de LayoutManagers. Cuando llega el momento de hacer diseños complejos, use MigLayout en lugar de tratar de aprender GridBagLayout; me lo agradecerá.

Cuestiones relacionadas