2009-08-04 25 views
5

Tengo tres JLabels y tres JTextAreas. Los tengo en borderlayout, center, pero quiero que cada uno de ellos esté en una línea diferente, eso no está sucediendo y los diez primeros resultados de búsqueda en Google para linebreak java no resuelven el problema. ¿Cómo puedo hacer un simple salto de línea?<br>? ¿norte? un salto de línea en java

+0

puede mostrar cómo se va a agregar los componentes a sus JPanel? – akf

+0

mainPanel.add (aLabel); mainPanel.add (aScroller); mainPanel.add (bLabel); mainPanel.add (bScroller); mainPanel.add (cLabel); mainPanel.add (cScroller); –

+0

Funcionó así: mainPanel.setLayout (nuevo BoxLayout (mainPanel, BoxLayout.PAGE_AXIS)); –

Respuesta

7

Si se trata de una aplicación Swing, debe usar un layout manager para colocar sus campos en el contenedor.

2

El salto de línea no ayudará con la colocación de objetos Swing; necesita colocar un diseño en un centro de JPanel. Es decir, el centro de su diseño de borde debe ser un único objeto Swing, un JPanel, y debe establecerlo en un estilo que le permita apilar cada widget. GridLayout (6,1) puede hacerlo.

1

intentar usar un GridLayout para empezar:

panel.setLayout(new GridLayout(0,2)); 
// the order of added components is important 
panel.add(labelA); 
panel.add(textAreaA); 
panel.add(labelB); 
panel.add(textAreaB); 
... 

no se ve muy bonito pero le ayudará a comenzar.

Si no configura un LayoutManager en un panel nuevo, utilizará un FlowLayout que se comporta de forma similar al diseño HTML. Pero no existe un salto de línea previsto en un FlowLayout. Simplemente colocará componente tras componente hasta que llegue al final del espacio disponible y luego comience una nueva fila.
Si desea controlar sus diseños, no use FlowLayout.

Los administradores de diseño es posible que desee conocer son:

  • BorderLayout - muy buena si desea que el contenido de tamaño variable
  • GridLayout - sencilla es igual a la anchura y la altura de la rejilla
  • nula - le permite usar setBounds en cada componente para obtener posiciones absolutas

Hay más, pero estos tres deberían permitirle diseñar el 95% de sus paneles.

2

Puede usar administradores de diseño como GridLayout o GridBagLayout. Aunque este último solo se recomienda para código generado por generadores GUI, lo prefiero porque me da la mayor flexibilidad.

JPanel panel = new JPanel(); 
GridBagLayout layout = new GridBagLayout(); 
panel.setLayout(layout); 
layout.add(label1, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area1, new GridBagConstraints(1, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(label2, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area2, new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(label3, new GridBagConstraints(0, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area3, new GridBagConstraints(1, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
panel.add(label1); 
panel.add(label2); 
panel.add(label3); 
panel.add(area1); 
panel.add(area2); 
panel.add(area3); 

Por supuesto, esto se ve bastante feo pero debería comenzar.

También se puede abusar de un BorderLayout:

JPanel panel = new JPanel(new BorderLayout()); 
JPanel topRow = new JPanel(); 
panel.add(topRow, BorderLayout.PAGE_START); 
topRow.add(label1); 
topRow.add(area1); 
JPanel middleRowBox = new JPanel(new BorderLayout()); 
panel.add(middleRowBox, BorderLayout.CENTER); 
JPanel middleRow = new JPanel(); 
middleRowBox.add(middleRow, BorderLayout.PAGE_START); 
middleRow.add(label2); 
middleRow.add(area2); 
JPanel bottomRowBox = new JPanel(); 
middleRowBox.add(bottomRowBox, BorderLayout.CENTER); 
JPanel bottomRow = new JPanel(); 
bottomRowBox.add(bottomRow, BorderLayout.PAGE_START); 
bottomRow.add(label3); 
bottomRow.add(area3); 
bottomRowBix.add(new JPanel(), BorderLayout.CENTER); 
+1

Después de crear MUCHOS componentes de UI, ya solo uso GridBagLayout, sí, es un poco más de trabajo, pero se puede garantizar que si hace las cosas bien, su vista se escalará adecuadamente. – aperkins

+0

Después de construir MUCHOS componentes de UI, ya no usamos GridBagLayout, sí, le da algunas opciones agradables de escalamiento y alineación de celdas, pero no hay nada que no pueda hacer con algunos paneles con LayoutManagers más simples y la refactorización puede ser un problema. . Y si haces las cosas mal, puedes pasar una hora encontrando un entorno falso y singular. – Stroboskop

Cuestiones relacionadas