2009-09-30 13 views
5

Tengo una tabla con 3 columnas que tienen los siguientes valores en los encabezados: 'No.', 'X [mm]', 'Y [mm]'. Esta tabla contiene las coordenadas de los puntos en milímetros. Tengo una casilla de verificación en la que la tabla debe repoblarse para mostrar las coordenadas en pulgadas. Además, los valores del encabezado de la columna deberían ser: 'No.', 'X [in]', 'Y [in]'.Cambiando dinámicamente el texto del encabezado de columna en JTable

En resumen, quiero cambiar dinámicamente el texto del encabezado de la tabla.

En detalle: La tabla es una subclase de JTable. Además, se ha establecido una subclase de 'DefaultTableModel' como el modelo para la tabla. He proporcionado los valores del encabezado en el constructer de la subclase del modelo de datos.

¿Alguna idea? Mi aplicación solo es compatible con jdk v1.4, por lo que sería bueno si la solución es compatible con la versión :)

Respuesta

24

Puede actualizar el TableColumnModel directamente:

JTableHeader th = table.getTableHeader(); 
TableColumnModel tcm = th.getColumnModel(); 
TableColumn tc = tcm.getColumn(0); 
tc.setHeaderValue("???"); 
th.repaint(); 
+0

Esto no es una solución 100% porque funciona sólo hasta que el modelo se cambia o "tableStructureChanged " Está despedido. Luego, el texto de la columna se volverá a leer del modelo. –

+3

Si eso es un problema, puede usar table.setAutoCreateColumnsFromModel (false) después de crear inicialmente la tabla – camickr

+0

+1. Funciona genial. Gracias. – Withheld

2

No puedo probar aquí, pero me resulta familiar que este método '[DefaultTableModel.setColumnIdentifiers(...)][1]' haga lo que desee.

Básicamente, ejecuta 'DefaultTableModel.getColumnCount()' para averiguar la cantidad de columnas (a menos que ya lo sepa). Luego ejecuta 'DefaultTableModel.getColumnName(int ColumnIndex)' para obtener el nombre de cada uno, cámbielo de la forma que desee y colóquelo en una matriz. Después de eso, los configura usando el 'DefaultTableModel.setColumnIdentifiers(...)'.

Espero que esto ayude.

8

Si tiene número de columna usar ese código

jtable.getColumnModel().getColumn(5).setHeaderValue("newHeader"); 
+1

Debe llamar a 'jtable.getTableHeader(). Repaint();' después del código para actualizar la tabla. – Amin

Cuestiones relacionadas