limite de tamaño en los jTextField se expanden cuando hay una cadena grande.¿como puedo hacer para que no se expanda solo?

publicado por: Anonymous

Buen Día

Me di cuenta de que los jtext field no tienen un limite fijo. cuando hay una cadena de texto muy grande se expande sola la idea es que mis campos se queden tal cual como los diseñe.
he intentado con:

  1. Darle click derecho -> propiedades -> maximunSize -> selecciono Value from exixting component
  2. campotxt.setmaximunSize(campotxt.getPreferredSize)
  3. Ponerle el tamaño fijo en PreferedSize y en maximunSize
  4. Al panel le quite la propiedad de Resizable a los lados
    Y nada funciona.


Realmente se me acabaron las ideas y las consultas en internet
aquí les dejo una imagen de lo que ocurre.
de antemano MUCHAS GRACIAS
introducir la descripción de la imagen aquí

este es otro de mis frames el cual tiene dentro de un panel todos los JTextField:

introducir la descripción de la imagen aquí

solución

Es muy probable que tenga que ver con el gestor de distribución.

En Swing la elección del gestor de distribución depende de lo que queramos pintar y por supuesto si nos piden cambios según lo que hayamos escogido puede resultar complejo actualizar la distribución de nuestros componentes en la pantalla.

Podemos elegir el gestor de distribución nulo pero esto no se recomienda. ¿Por que? Por que no es responsivo.

¿Cual elijo entonces? Uno de los más flexibles es el GridBagLayout. Por sus características puede usarse desde código solo que como veo que prefieres usar el editor gráfico de NetBeans será con este con el que atendamos a tu pregunta.

Los pasos para usarlo son:

  1. Sobre el JFrame o JDialog que se mira en el árbol de elementos damos click derecho -> Activar gestor de distribución -> Diseño de bolsa de rejilla (GridBagLayout si NetBeans esta en ingles). Una vez hecho esto veremos que bajo el JFrame o JDialog se aprecia el gestor de distribución elegido:

Se agrega el GridBagLayout al JFrame

  1. Directo sobre el JFrame o el JDialog donde vayamos a trabajar deben agregarse todos los elementos sin hacer caso alguno de si se ven bien en la pantalla. Por simplicidad deben agregarse en su orden natural. A todos los label les pondremos el texto de las leyendas que llevarán para una mejor identificación en la pantalla.

Se agregan todos los elementos a la pantalla

  1. A cada label le editaremos sus propiedades. Como todos los label estan del lado derecho y están alineados pondremos las mismas propiedades (las resaltadas en negrita).

Editando las propiedades de los jlabel

Relleno: horizontal.
Para que se expandan horizontalmente.

Relleno interno Y: 10.
Es como la propiedad padding en html. Es un espacio interno para el componente pero solo en el eje vertical ( el relleno interno X sería en el eje horizontal pero no lo necesitamos). Puedes no editarlo y veras todos los elementos al final demasiado juntos en el eje vertical.

Anclaje: : Este

Es para indicarle al gestor de distribución que coloque el elemento a nuestra izquierda.

  1. El elemento que muestra la ruta del archivo lo he entendido como un label.
    A este le he puesto las siguientes propiedades.

introducir la descripción de la imagen aquí

Relleno: horizontal

Para que el elemento se expanda.

Peso x: 0.5

Le estamos indicando que este elemento debe abarcar la mitad del ancho de la pantalla.

  1. Al botón para elegir la imagen le ponemos las siguientes propiedades:

Propiedades del botón de elección de imagen

Ancho de rejilla: Resto

Para indicar que este elemento ocupa todo lo que queda de espacio (provocando que los demás elementos bajen).

Relleno: horizontal

Para que ocupe todo el espacio. Puedes omitirlo y ver si te parece mejor como se esta presentando el botón.

Peso X: 0.1

Indica lo que ocupa de ancho el elemento en la fila. Es decir es una 5ta parte del label con la ruta.

  1. Para la imagen de cocacola que he colocado como un label he puesto las siguientes propiedades. Estas mismas propiedades se aplicarán a todos los campos de texto (jtextfield).

imagen del refresco

Ancho de rejilla: resto

Para que después de este elemento el siguiente baje.

Relleno: horizontal

Para que se use todo el espacio disponible.

Si ejecutamos la aplicación observaremos lo siguiente:

Ejecutando la aplicación

Y si editamos un texto no se descuadra. Eso nos lo asegura el gestor de distribución.
agregando el texto a un campo

Notese que si cambiamos el tamaño de la pantalla los componentes se acomodan.

Cambiando el tamaño de la pantalla

Bueno aquí estoy haciendo una trampa. En los textfield he colocado valores por defecto (por que no tengo implementación de la selección de la imagen).

Para que la solución funcione bien cuando no hay imagen seleccionada se necesita poner un preferedSize al label de la ruta de al menos 24×24 ( si es un textfield es posible que no se necesite este cambio). También para el label de la imagen hay que poner un preferedSize. Yo he colocado uno de [300, 100] con lo que tengo este efecto:

Frame sin nada por defecto

Es muy probable que quieras dejar más espacio entre los componentes y el borde de la pantalla. Para ello existe la propiedad intercalaciones.

La propiedad intercalaciones

Como nota final te comento que todas estas propiedades solo existen para el GridBagLayout, si eliges otro gestor de distribución las propiedades serán distintas y la manera de ubicar los componentes será completamente diferente. La mayoría de los gestores de distribución se adaptan a cambios de tamaño de pantalla menos el distribuidor de contenido nulo. Es por ello que no se recomienda usarlo aunque dicho sea de paso muchos lo utilizan.

Espero que te ayude. Quedo atento a cualquier comentario.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *