resultado - jtextfield java propiedades
Java, Swing: ¿cómo configuro el ancho máximo de un JTextField? (3)
Lo resolví estableciendo el ancho máximo en el contenedor del campo de texto, usando setMaximumSize
.
De acuerdo con la respuesta de Davetron, esta es una solución frágil, porque el administrador del diseño podría ignorar esa propiedad. En mi caso, el contenedor es el más alto, y en una primera prueba funcionó.
Estoy escribiendo un componente de selección de archivos personalizado. En mi interfaz de usuario, primero el usuario hace clic en un botón, que muestra un JFileChooser
; cuando está cerrado, la ruta absoluta del archivo seleccionado se escribe en un JTextField
.
El problema es que las rutas absolutas suelen ser largas, lo que hace que el campo de texto se agrande, lo que hace que su contenedor sea demasiado ancho.
Intenté esto, pero no hizo nada, el campo de texto sigue siendo demasiado amplio:
fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));
Actualmente, cuando está vacío, ya tiene 400 px de longitud, debido a GridBagConstraints
adjunto.
Me gustaría que fuera como campos de texto en páginas HTML, que tienen un tamaño fijo y no aumentan cuando la entrada es demasiado larga.
Entonces, ¿cómo configuro el tamaño máximo para un JTextField
?
No configure ninguno de los tamaños en el campo de texto. En su lugar, establezca el tamaño de columna en un valor distinto de cero a través de setColumns o utilizando el constructor con el argumento de columna.
Lo que está sucediendo es que el tamaño preferido informado por JTextComponent cuando las columnas son cero es la cantidad total de espacio necesaria para representar el texto. Cuando las columnas se establecen en un valor distinto de cero, el tamaño preferido es el tamaño necesario para mostrar el ancho de muchas columnas estándar. (para una fuente de tono variable, generalmente se acerca al tamaño de la minúscula ''m''). Con columnas puestas a cero, el campo de texto solicita tanto espacio como puede y extiende todo el contenedor.
Dado que ya lo tiene en un GridBagLayout con un relleno, probablemente podría establecer las columnas en 1 y dejar que el relleno se extienda en función de los otros componentes, o algún otro número adecuadamente bajo.
Puede depender del administrador de diseño en el que se encuentre el campo de texto. Algunos administradores de diseño se expanden y otros no. Algunos se expanden solo en algunos casos, otros siempre.
Supongo que estás haciendo
filedNameTextField = new JTextField(80); // 80 == columns
Si es así, para la mayoría de los diseños razonables, el campo no debería cambiar de tamaño (al menos, no debería crecer). A menudo, los administradores de maquetación se comportan mal cuando se los coloca en JScrollPane
s.
En mi experiencia, tratar de controlar los tamaños a través de setMaximumSize
y setPreferredWidth
etc., es precario en el mejor de los casos. Swing decidió por su cuenta con el administrador de diseño y hay poco que puede hacer al respecto.
Dicho todo esto, no he tenido el problema que está experimentando, lo que me lleva a pensar que un uso juicioso de un administrador de diseño resolverá el problema.