Necesito ayuda para comprender el comportamiento de algunas restricciones de fila

En un proyecto de Java en el que estoy trabajando, mis restricciones se establecieron originalmente en:

JPanel panel = new JPanel();
String layoutConstraints = "fill";
String columnConstraints = "[right]rel[grow]";
String rowConstraints = "[]10[]";
panel.setLayout(new MigLayout(layoutConstraints, columnConstraints, rowConstraints));

Por lo que entiendo de la documentación, el último espacio y la restricción se repetirán para cada fila que exceda la especificación. (cf. "Si hay menos filas en la cadena de formato que en las celdas de la cuadrícula en esa dimensión, se usará la última restricción de espacio y fila para las filas adicionales").

Entonces, por lo que entiendo, esto debería significar que las restricciones de fila serían de hecho []10[]10[]10[] y así sucesivamente.

Mi problema surge cuando tengo un JTextArea en un JScrollPane con filas configuradas en 3:

JLabel label = new JLabel("Text area");
JTextArea text = new JTextArea("Test", 3, 40);
JScrollPane scroll = new JScrollPane(text);
panel.add(label);
panel.add(scroll, "grow,wrap");

Cuando se usa con una restricción de fila de []10[] tiene solo 1 fila de alto, pero cuando cambio

String rowConstraints = "[]10[]";

a

String rowConstraints = "[]";

de repente usa la altura completa de 3 filas que especifiqué para JTextArea.

¿He entendido mal cómo funcionan las restricciones de fila o hay algo más en el trabajo aquí que no pude ver/entender por completo?

preguntado el 12 de junio de 12 a las 13:06

1 Respuestas

En ambos casos, está utilizando solo una fila de diseño (es decir, fila administrada por MigLayout) a la que coloca JLabel (primera columna) y JScrollPanel (que contiene JTextArea, segunda columna).

Puede visualizar fácilmente la estructura de filas y columnas de MigLayout simplemente agregando "depurar" a las restricciones de diseño:

String layoutConstraints = "fill,debug";

Y el lanzamiento de la aplicación. Realmente recomiendo usar esta configuración mientras trabaja en sus diseños.

Propiedad de filas que estableció para JTextArea no tienen nada que ver con las filas de diseño. Esta propiedad solo dice JTextArea componente qué tamaño intentará tener, como se define en javadocs:

java.awt.TextArea tiene dos filas y columnas de propiedades que se utilizan para determinar el tamaño preferido. JTextArea usa estas propiedades para indicar el tamaño preferido de la ventana gráfica cuando se coloca dentro de un JScrollPane (...)

Pero JTextArea filas no se corresponde de ninguna manera con las filas en el diseño del contenedor (JPanel en su caso).

Por favor, aprenda más cuidadosamente (¡y experimente!) qué es exactamente JTextArea row medios de propiedad.

Respondido el 12 de junio de 12 a las 17:06

Uso la depuración todo el tiempo mientras diseño mis interfaces de usuario hasta que terminen. También sé que la fila de JTextArea no tiene nada que ver con la restricción de fila. Mi pregunta principal era por qué, si []10[] significa []10[]10[]10[] (y así sucesivamente para todas las filas), la restricción de fila repetida de [] en la [] caso permite el JScrollPane + JTextArea ser de 3 filas (como se especifica en el JTextArea) mientras que la restricción de fila repetida de 10[] in []10[] lo empuja hacia abajo a simplemente 1 fila. - asmodai

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.