Tengo una JTable en la que configuro el tamaño de la columna de la siguiente manera:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(27);
table.getColumnModel().getColumn(1).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(90);
table.getColumnModel().getColumn(4).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(120);
table.getColumnModel().getColumn(7).setPreferredWidth(100);
table.getColumnModel().getColumn(8).setPreferredWidth(95);
table.getColumnModel().getColumn(9).setPreferredWidth(40);
table.getColumnModel().getColumn(10).setPreferredWidth(400);
Esto funciona bien, pero cuando la tabla está maximizada, obtengo un espacio vacío a la derecha de la última columna. ¿Es posible cambiar el tamaño de la última columna al final de la ventana cuando se cambia el tamaño?
Encontré una AUTO_RESIZE_LAST_COLUMN
propiedad en los documentos pero no funciona.
Editar: JTable
está en JScrollPane
su tamaño preferido.
Con
JTable.AUTO_RESIZE_OFF
, la tabla no cambiará el tamaño de ninguna de las columnas por usted, por lo que tomará su configuración preferida. Si su objetivo es que las columnas tengan el tamaño predeterminado de su preferencia, excepto para que la última columna llene el resto del panel, tiene la opción de usarJTable.AUTO_RESIZE_LAST_COLUMN
autoResizeMode, pero podría ser más efectivo cuando se usa con enTableColumn.setMaxWidth()
lugar de TableColumn. setPreferredWidth () para todas menos la última columna.Una vez que esté satisfecho de que
AUTO_RESIZE_LAST_COLUMN
realmente funciona, puede experimentar con una combinación deTableColumn.setMaxWidth()
yTableColumn.setMinWidth()
fuente
JTable.AUTO_RESIZE_LAST_COLUMN
se define como "Durante todas las operaciones de cambio de tamaño, aplique ajustes solo a la última columna", lo que significa que debe establecer el modo de tamaño automático al final de su código , de lo contrario, setPreferredWidth () no afectará nada.Entonces, en su caso, esta sería la forma correcta:
fuente
Usa este método
O ampliar la
JTable
clase:Y entonces
fuente
Al leer el comentario de Kleopatra (la segunda vez que sugirió echar un vistazo a javax.swing.JXTable , y ahora lamento no haberlo visto la primera vez :)) te sugiero que sigas el enlace
Tuve esta solución para el mismo problema: (pero le sugiero que siga el enlace de arriba) Al cambiar el tamaño de la tabla, escale el ancho de la columna de la tabla al ancho total de la tabla actual. para hacer esto, uso una matriz global de entradas para los anchos de columna (relativos)):
Utilizo esta función para establecer los anchos de columna de la tabla:
Al configurar los datos, llamo:
y al cambiar, llamo al ComponentListener establecido en el padre de la tabla (en mi caso, el JScrollPane que es el contenedor de mi tabla):
tenga en cuenta que la tabla JTable también es global:
Y aquí configuro el oyente:
fuente
por defecto el comportamiento de cambio de tamaño ! Si se llama a este método en algún lugar de su código DESPUÉS de que haya configurado las propiedades de cambio de tamaño de la columna, se restablecerán todas sus configuraciones. Este efecto secundario puede ocurrir indirectamente. Fe como consecuencia del cambio del modelo de datos vinculados de una manera que se llama a este método, después de que se establecen las propiedades.
fuente
No es necesaria la opción, simplemente haga que el ancho preferido de la última columna sea el máximo y ocupará todo el espacio adicional.
fuente
Este código me funcionó sin setAutoResizeModes.
fuente
Utilice este código. Funcionó para mí. Consideré 3 columnas. Cambie el valor del bucle de su código.
fuente