java - programacion - Cambio de tamaño automático de los anchos de columna JTable
manual de programacion android pdf (4)
No hay opción para cambiar automáticamente el tamaño de una columna más grande que la otra.
Tal vez puedas hacer algo como:
tca = new TableColumnAdjuster( table, 0 );
tca.adjustColumns();
TableColumnModel tcm = table.getColumnModel();
TableColumn tc = tcm.getColumn(1);
tc.setWidth(tc.getWidth() + 25);
Esto le permitiría agregar espacio adicional a la columna 1. Este espacio adicional solo se agregaría la primera vez que se muestre la tabla.
Otra opción es utilizar:
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
Esto asignaría espacio adicional proporcionalmente a cada columna.
Necesito mi JTable para redimensionar automáticamente el ancho de sus columnas para que se ajuste al contenido. He encontrado la clase TableColumnAdjuster
muy útil. Pero hay un pequeño problema. Digamos que tengo 5 columnas, y su contenido es muy corto. En ese caso, si utilizo el ajustador automático, establece los primeros anchos de las cuatro columnas de acuerdo con su contenido y le da todo el resto del espacio a la última columna. Por favor vea el ejemplo.
Aquí la última columna, Balance
se le da todo el espacio sobrante. Pero qué pasa si tengo que dar ese espacio a una de las columnas del medio. En el caso anterior, necesito asignar ese espacio a la tercera columna, name
. Intenté modificar el TableColumnAdjuster
adjustColumns()
la clase adjustColumns()
. Pero no pude hacerlo funcionar.
column.setPreferredWidth()
tanto column.setPreferredWidth()
como column.setWidth()
para cambiar los tamaños de columna. Pero parece que no cambia nada. ¿Cómo puedo cambiar efectivamente los tamaños de columna de un JTable
. Si hay alguna otra alternativa o una respuesta directa a mi problema principal, es mejor. ¡Gracias!
Puedes hacerlo:
JPanel jp = new JPanel();
jp.add(table);
jp.setLayout(new GridLayout(1,1)); /* little trick ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part
Puedes probar lo siguiente:
public void resizeColumnWidth(JTable table) {
final TableColumnModel columnModel = table.getColumnModel();
for (int column = 0; column < table.getColumnCount(); column++) {
int width = 15; // Min width
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width +1 , width);
}
if(width > 300)
width=300;
columnModel.getColumn(column).setPreferredWidth(width);
}
}
Esto debe ejecutarse antes del método de cambio de tamaño.
Si usted tiene:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setAutoResizeMode () le dirá a su tabla cómo cambiar el tamaño que debe darle una oportunidad. Todas las diferentes opciones disponibles para ver las diferencias, en Mi caso, quería cambiar específicamente el tamaño de dos columnas y dejar que decida cómo ajustar todas las demás.
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);
colModel.getColumn(2).setPreferredWidth(400);