2010-06-14 6 views
3

JAVA NETBEANSde JTable et les indices de ligne de DefaultTableModel perdent leur synchronisation après que je sorte JTable

// resultsTable, myModel 
JTable resultsTable; 
DefaultTableModel myModel; //javax.swing.table.DefaultTableModel 
myModel = (DefaultTableModel) resultsTable.getModel(); 

// event of clicking on item of table 
String value = (String) myModel.getValueAt(resultsTable.getSelectedRow(), columnIndex) 

J'utilise JTable et DefaultTableModel pour voir un tableau de diverses informations et je veux obtenir une valeur d'une certaine colonne de l'index sélectionné de la table.

Le code que j'ai écrit ci-dessus fonctionne bien sauf quand: J'utilise le genre de l'interface graphique (cliquez sur le nom du champ que je veux trier sur la table) La table est bien triée, mais après que lorsque je sélectionne une rangée , il obtient la valeur de la ligne qui était là avant le tri. Cela signifie qu'après le tri (à l'aide de l'interface graphique de JTable) , les objets 'myModel' et 'resultsTable' ont des index de ligne différents.

Comment les synchroniser?

Répondre

10

Vous devez utiliser les méthodes 'convertXXX' sur les JTable see the JavaDoc

int row = resultsTable.getSelectedRow(); 
if (row != -1) { 
    row = table.convertRowIndexToModel(row); 
    String value = (String) myModel.getValueAt(row, columnIndex) 
+0

Merci très utile –

0

Sauf de la solution Guillaume a (Merci) Je l'ai fait:

// resultsTable, myModel 

JTable resultsTable; 

DefaultTableModel myModel; //javax.swing.table.DefaultTableModel 

myModel = (DefaultTableModel) resultsTable.getModel(); 

// event of clicking on item of table 

String value = (String) **resultsTable**.getValueAt(resultsTable.getSelectedRow(), columnIndex) 

je l'objet resultsTable au lieu de l'objet myModel pour obtenir la valeur.

0

Un problème avec l'utilisation de JTable.getValueAt() est d'obtenir la colonne que vous voulez. Lorsque les colonnes sont déplacées dans l'interface graphique, les index "changent" pour correspondre à la vue. En utilisant le AbstractTableModel.getValueAt() et le JTable.convertXXX() (comme indiqué par Guillaume), il suffit d'utiliser les index des colonnes pour le modèle lors de la récupération des données.