2009-10-08 10 views
6
JPanel pMeasure = new JPanel(); 
.... 
JLabel economy = new JLabel("Economy"); 
JLabel regularity = new JLabel("Regularity"); 
pMeasure.add(economy); 
pMeasure.add(regularity); 
... 

Cuando ejecuto el código anterior consigo esta salida:Como hacer JLabels comienzan en la línea siguiente

Economy Regularity 

¿Cómo puedo obtener esta salida, donde cada JLabel comienza en una nueva línea? Gracias

Economy 
Regularity 
+0

Posible duplicado de [agregar controles verticalmente en lugar de horizontalmente usando el diseño de flujo] (http://stackoverflow.com/questions/13510641/add-controls-vertically-instead-of-horizontally-using-flow-layout) – Abhijeet

Respuesta

18

Usted querrá jugar con layout managers para controlar la posición y el tamaño de los controles en su JPanel. Los gerentes de diseño son responsables de colocar los controles, determinar a dónde van, qué tan grandes son, cuánto espacio hay entre ellos, qué sucede cuando cambia el tamaño de la ventana, etc.

Hay montones de diferentes administradores de diseño, cada uno de los cuales permite a los controles de diseño de diferentes maneras. El administrador de diseño predeterminado es FlowLayout, que como has visto simplemente coloca los componentes uno al lado del otro, de izquierda a derecha. Eso es lo más simple. Algunos otros gestores de diseño común son:

  • GridLayout - ordena los componentes en una rejilla rectangular con filas y columnas
  • BorderLayout de igual tamaño - tiene un componente principal en el centro y hasta cuatro componentes circundantes arriba, abajo, a la izquierda y a la derecha.
  • GridBagLayout - Big Bertha de todos los administradores de disposición integrados, es el más flexible pero también el más complicado de usar.

Podría, por ejemplo, usar un BoxLayout para diseñar las etiquetas.

BoxLayout o bien apila sus componentes uno sobre el otro o los coloca en una fila - a su elección. Puede pensar que es una versión de FlowLayout, pero con una mayor funcionalidad. Aquí es una imagen de una aplicación que pueda utilizar BoxLayout para mostrar una columna de centrado de los componentes:

BoxLayout screenshot http://java.sun.com/docs/books/tutorial/figures/uiswing/layout/BoxLayoutDemo.png

Un ejemplo de código usando BoxLayout sería:

JPanel pMeasure = new JPanel(); 
.... 
JLabel economy = new JLabel("Economy"); 
JLabel regularity = new JLabel("Regularity"); 
pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS)); 
pMeasure.add(economy); 
pMeasure.add(regularity); 
... 
0

Una forma rápida es para usar html dentro de JLabel. Por ejemplo, incluye la etiqueta <br/>.

De lo contrario, implemente un BoxLayout.

2

Esto es lo que es necesario utilizar:

JLabel economy = new JLabel("<html>Economy<br>Regularity</html>"); 
+2

This te permitiría crear solo un JLabel, si estás esperando que entren datos, es necesario que tengas muchos más códigos. Es ... ineficiente. – Lolmewn

4

leí este fragmento de código:

pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.VERTICAL)); 

Parece BoxLayout no tiene VERTICAL.Tras la búsqueda, esto va a funcionar usando el siguiente código:

pMeasure.setLayout(new BoxLayout(pMeasure, BoxLayout.Y_AXIS)); 
+0

@pricepiero Gracias 'pMeasure.setLayout (nuevo BoxLayout (pMeasure, BoxLayout.Y_AXIS));' lo resuelve por mí. Verticalmente establece todos los componentes en el JPanel. – Abhijeet

0

Hacer un JPanel separado para cada línea, y establecer las dimensiones para adaptarse a cada palabra:

JLabel wordlabel = new JLabel("Word"); 

JPanel word1 = new JPanel(); 
word1.setPreferredSize(new Dimension(#,#); 

Esto debería funcionar para cada palabra. A continuación, puede agregar cada uno de esos JPanels a su JPanel principal. Esto también le permite agregar otros componentes al lado de cada palabra.

Cuestiones relacionadas