2012-03-04 25 views
5

Soy bastante nuevo en Java y estoy tratando de crear una aplicación GUI con algunas etiquetas, botones y campos de texto. El programa es bastante simple y solo quería usar un diseño predeterminado, que es FlowLayout. Logré ubicar y dimensionar todo bien, pero lo único que parece no estar funcionando es la alineación. Quiero colocar botones y campos de texto con ciertas alineaciones, pero cada vez que configuro una alineación, mueve el texto dentro de cualquier objeto en lugar de hacerlo en el objeto mismo. Por ejemplo, escribí:Java Swing FlowLayout Alignments

button.setHorizontalAlignment(JButton.RIGHT); 

pero parece que se alinea el texto dentro del botón en lugar del botón de sí mismo. ¿Hay alguna forma de alinear el botón en lugar del texto dentro de él?

Sé que la alineación podría ser más fácil con algún otro tipo de diseño (por ejemplo, BoxLayout), pero solo quiero usar el FlowLayout para este, a menos que sea imposible alinearlos usando FlowLayout (que no hago) creo que sí).

Gracias de antemano.

+2

+1 buena pregunta, para Swing es mejor publicar preguntas con [SSCCE] (http://sscce.org/) – mKorbel

Respuesta

13

Ver el constructor FlowLayout(int align).

construye un nuevo FlowLayout con el especificado alineación y un defecto de 5 unidades brecha horizontal y vertical. El valor del argumento de alineación debe ser uno de FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER, FlowLayout.LEADING o FlowLayout.TRAILING.

Parece que está después de un FlowLayout.RIGHT como se ve en this answer (el combo y la casilla de verificación en la parte superior).

+0

SÍ, esto funcionó. Obviamente necesito usar otros tipos de diseños para obtener una mejor alineación, pero esto funciona bastante bien. Gracias. – Dennis

+1

Luego iría por un diseño anidado como el anterior. Aunque la única alineación en eso además del diseño de flujo es el centrado de la imagen en 'GridBagLayout'. Esto último no se logra en el constructor, sino mediante el uso de una restricción de diseño (o más bien, descuidando el uso de uno) al agregar la imagen. –

+0

@AndrewThompson: Cuando escribo esto 'JPanel plafComponents = new JPanel (nuevo FlowLayout (FlowLayout.RIGHT, 3,3));', me da un error al decir que no puedo encontrar el símbolo, VARIABLE derecha o lo que sea que use. ¿Hay algún problema con mi JDK? Aunque puedo usar el constructor FlowLayout normal. Esperando que me puedas avisar de lo que está mal en mi extremo? o ¿Comenzaré un nuevo hilo para esto? –

2

setHorizontalAlignment de AbstractButton establece la alineación horizontal del icono y texto no la posición del botón. El valor predeterminado de AbstractButton es SwingConstants.CENTER.

Si desea alinear el button..set la posición al tiempo que añade al panel o frame..something como esto ....

p.add(button, BorderLayout.SOUTH);//using `BorderLayout` 

diseños de flujo se utilizan normalmente para organizar los botones en una panel. Organizará los botones de izquierda a derecha hasta que no quepan más botones en la misma línea.

+0

No creo que este trabajo .. Lo probé pero nada cambia. Sí dice que el segundo parámetro es para la posición, pero no cambia nada por alguna razón. – Dennis

2

No creo que pueda hacer esto con un FlowLayout solo.

Mi sugerencia sería:

  • considerar el cambio a MigLayout que es un mecanismo de diseño mucho más potente. MigLayout básicamente le permite ubicar los componentes dentro de una grilla flexible, y puede establecer la alineación específica de un componente dentro de cada celda de la grilla.
  • Cuando desee alinear los subcomponentes, también tiene sentido colocarlos dentro de un JPanel anidado. A continuación, puede utilizar un diseño separado para este JPanel (¿quizás BorderLayout?) Que le permitirá obtener la alineación exacta que desee.