Así que estoy trabajando con un JTable
, que está vinculado a un modelo de datos personalizado propio. Eso es todo funcional, pero el problema que tengo es que cada vez que hago un cambio en la tabla (disparando tableDataChanged, tableStructureChanged, etc.) todos los anchos de columna se restablecen a los valores predeterminados. Entiendo por investigar que esto tiene que ver con el TableColumnModel
asignado por defecto. Fuera de este restablecimiento, estoy contento con la funcionalidad del DefaultTableColumnModel
, pero me gustaría mantener el ancho de las columnas si un usuario debe cambiar su tamaño (arrastrando el borde del encabezado de la columna).¿Cómo puedo mantener los anchos de columna especificados por el usuario en una tabla JTable?
Conozco setPreferredWidth()
para TableColumns, y he podido hacerlo con éxito; Supongo que mi pregunta es qué tipo de evento debería escuchar para guardar y establecer este ancho preferido. Traté de agregar un PropertyChangeListener
al encabezado de la tabla, pero obtendría un StackOverflow cada vez que intenté cambiar el tamaño (supongo que se estaba ejecutando de forma recursiva). Estoy perfectamente de acuerdo con agregar un miembro de datos adicional en el modelo de datos para los anchos de columna, y almacenarlo allí, pero simplemente no sé cuándo/cómo establecer estos anchos para que no sean anulados por el fireTableStructureChanged()
, eventos etc. ¿Pensamientos?
Antes de cerrar el proceso, lea los anchos de columna y guárdelos en un archivo de propiedades. Cuando abra su proceso, lea el archivo de propiedades y, si existe, configure los anchos de columna. Es posible que necesite extender el DefaultTableColumnModel para que pueda controlar el ancho de las columnas. –
Realmente hace esto en cualquier llamada a fireTableStructureChanged(), no solo al comienzo del programa, por lo que si agrego o elimino columnas en el modelo de datos (donde tiene que regenerar columnas) lo hace. He intentado reemplazar 'fireTableStructureChanged()' para establecer manualmente el ancho de las columnas, pero aparentemente no tiene ningún efecto. Supongo que no estoy seguro exactamente dónde está ocurriendo esta generación de columnas y dónde anularla. – kcoppock
Siempre he hecho anchos de columna basados en datos. Si encuentro algo, daré una respuesta. –