在对JTable进行排序后,JTable和DefaultTableModel的行索引失去了同步

时间:2010-06-14 09:29:19

标签: java sorting synchronization jtable tablemodel

JAVA NETBEANS

// 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)

我使用JTable和DefaultTableModel来查看各种信息的表 我想获得表格所选索引的某一列的值。

我上面写的代码工作正常,除非: 我使用GUI的那种(点击我要在表格上排序的字段名称) 该表已正确排序,但在此之后,当我选择一行时,它会得到 排序之前的行的值。 这意味着在排序后(使用JTable的GUI) 'myModel'和'resultsTable'对象具有不同的行索引。

如何同步这两个?

3 个答案:

答案 0 :(得分:10)

您需要在JTable see the JavaDoc

上使用'convertXXX'方法
int row = resultsTable.getSelectedRow();
if (row != -1) {
   row = table.convertRowIndexToModel(row);
   String value = (String) myModel.getValueAt(row, columnIndex)

答案 1 :(得分:0)

除了Guillaume给出的解决方案(谢谢) 我这样做了:

// 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)

我使用resultsTable Object而不是myModel Object来获取值。

答案 2 :(得分:0)

使用JTable.getValueAt()的问题是获取所需的列。当在GUI中移动列时,索引“更改”以匹配视图。通过使用AbstractTableModel.getValueAt()JTable.convertXXX()(如Guillaume所述),只需在检索数据时使用模型的列索引即可。