2008-09-24 24 views
8

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 aparece un JFileChooser; cuando está cerrado, la ruta absoluta del archivo seleccionado se escribe en JTextField.Java, Swing: ¿cómo configuro el ancho máximo de 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.

He intentado esto, pero no hice nada, el campo de texto sigue siendo demasiado amplia:

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

En la actualidad, cuando está vacío, ya es 400 píxeles de largo, debido a GridBagConstraints unidos lo.

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?

Respuesta

12

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.

Estoy asumiendo que estás haciendo

filedNameTextField = new JTextField(80); // 80 == columns 

Si es así, para los diseños más razonables, el campo no debe cambiar el tamaño (al menos, no debería crecer). A menudo, los administradores de diseño se comportan mal cuando se ponen en JScrollPane s.

En mi experiencia, tratando de controlar los tamaños a través de setMaximumSize y setPreferredWidth y así sucesivamente son precarios 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.

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, 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ó.

+0

Sí, desafortunadamente cómo funciona con Swing.Es un buen conjunto de herramientas en muchos sentidos, pero la imprevisibilidad de los componentes en diferentes administradores de diseño es realmente molesta. – davetron5000

3

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 columna.

Lo que está sucediendo es que el tamaño preferido informado por el 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.

+1

Recomiendo este enfoque cuando se usa 'FlowLayout'. – sworisbreathing

Cuestiones relacionadas