Pregunta

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 amplíe, haciendo que su contenedor sea demasiado ancho.

He intentado esto, pero no hizo nada, el campo de texto sigue siendo demasiado ancho:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));

Actualmente, cuando está vacío, ya tiene 400 px de longitud, debido a GridBagConstraints adjunto a él.

Me gustaría que fueran como campos de texto en páginas HTML, que tienen un tamaño fijo y no se amplían cuando la entrada es demasiado larga.

Entonces, ¿cómo establezco el tamaño máximo para un JTextField ?

¿Fue útil?

Solución

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 los diseños más razonables, el campo no debería cambiar de tamaño (al menos, no debería crecer). A menudo, los administradores de diseño se comportan mal cuando se colocan en JScrollPane s.

En mi experiencia, tratar de controlar los tamaños a través de setMaximumSize y setPreferredWidth y así sucesivamente es, en el mejor de los casos, precario. Swing se decidió por sí mismo con el administrador de diseño y no hay mucho que puedas hacer al respecto.

Dicho todo esto, no he tenido el problema que estás experimentando, lo que me lleva a creer que un uso juicioso de un administrador de diseño resolverá el problema.

Otros consejos

Resolví esto configurando el ancho máximo en el contenedor del campo de texto, usando setMaximumSize .

Según la respuesta de davetron, esta es una solución frágil, ya que el administrador de diseño podría ignorar esa propiedad. En mi caso, el contenedor es el más alto, y en una primera prueba funcionó.

No establezca 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 la columna.

Lo que está sucediendo es que el tamaño preferido informado por JTextComponent cuando las columnas es cero es la cantidad total de espacio necesario 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 la cantidad de anchos de columna estándar. (para una fuente de tono variable generalmente es similar al tamaño de la 'm' en minúscula). Con las columnas establecidas en cero, el campo de texto solicita la mayor cantidad de espacio posible y extiende todo el contenedor.

Ya que ya lo tienes en un GridBagLayout con un relleno, probablemente podrías 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top