2009-09-30 6 views
5

J'ai une table avec 3 colonnes qui ont les valeurs suivantes dans les en-têtes: 'No.', 'X [mm]', 'Y [mm]'. Cette table contient les coordonnées des points en millimètres. J'ai une case à cocher sur laquelle la table devrait repeupler pour montrer les coordonnées en pouces. De plus, les valeurs de l'en-tête de colonne doivent être: 'No.', 'X [in]', 'Y [in]'.Modification dynamique du texte de l'en-tête de colonne dans JTable

En bref, je veux changer dynamiquement le texte de l'en-tête de la table.

en détail: Cette table est une sous-classe de JTable. De plus, une sous-classe de 'DefaultTableModel' a été définie comme modèle pour la table. J'ai fourni les valeurs d'en-tête dans le constructeur de la sous-classe datamodel.

Une idée? Mon application est compatible uniquement avec jdk v1.4 donc ce serait bien si la solution est compatible avec la verion :)

Répondre

24

Vous pouvez mettre à jour le TableColumnModel directement:

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

Ce n'est pas une solution à 100% car il ne fonctionne que jusqu'à ce que le modèle est modifié ou « tableStructureChanged "est viré. Ensuite, le texte de la colonne sera relu du modèle. –

+3

Si c'est un problème, vous pouvez utiliser table.setAutoCreateColumnsFromModel (false) après la création initiale de la table – camickr

+0

+1. Fonctionne très bien. Merci. – Withheld

2

Je ne peux pas tester ici mais familier que cette méthode '[DefaultTableModel.setColumnIdentifiers(...)][1]' devrait faire ce que vous voulez.

Fondamentalement, vous exécutez 'DefaultTableModel.getColumnCount()' pour connaître le nombre de colonnes (sauf si vous le savez déjà). Ensuite, vous exécutez 'DefaultTableModel.getColumnName(int ColumnIndex)' pour obtenir le nom de chacun, changez-le comme vous le souhaitez et placez-le dans un tableau. Après cela, vous les réglez en utilisant 'DefaultTableModel.setColumnIdentifiers(...)'.

Espérons que cela aide.

8

Si vous avez le numéro de colonne utilisez ce code

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

Vous devez appeler 'jtable.getTableHeader(). Repaint();' après le code pour mettre à jour la table. – Amin

Questions connexes