3

爪哇网豆

// 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”对象具有不同的行索引。

我如何同步这两个?

4

3 回答 3

10

您需要在 JTable 上使用“convertXXX”方法,请参阅 JavaDoc

int row = resultsTable.getSelectedRow();
if (row != -1) {
   row = table.convertRowIndexToModel(row);
   String value = (String) myModel.getValueAt(row, columnIndex)
于 2010-06-14T09:40:13.230 回答
0

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

// 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 对象而不是 myModel 对象来获取值。

于 2010-06-14T09:59:26.190 回答
0

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

于 2011-11-14T07:32:41.203 回答