使用rowInModel或rowInTable获取JTable单元格值?

时间:2013-09-21 22:18:14

标签: java swing jtable

从表中获取单元格值是正确的:

int rowInTable = table.getSelectedRow();
int rowInModel = table.convertRowIndexToModel(rowInTable);


Object id = this.getValueAt(rowInModel,1);

或者:

Object id = this.getValueAt(rowInTable,1);

我在我的模型类中得到id

2 个答案:

答案 0 :(得分:4)

这是“正确的”。

int rowInTable = table.getSelectedRow();
int rowInModel = table.convertRowIndexToModel(rowInTable);
Object id = this.getValueAt(rowInModel,1);

这是必需的,因为排序和过滤。模型对View一无所知。因此,当您尝试通过视图索引访问模型索引时,您必须转换它。  来自JTable

  

同样使用提供的排序和过滤功能   通过RowSorter 底层的TableModel不需要知道该怎么做   排序,而RowSorter将处理它。协调转换将   使用JTable的基于行的方法时必须使用   基础TableModel 所有JTables基于行的方法都是如此   RowSorter的内容,不一定与   基础TableModel 。例如,选择总是以术语表示   JTable,这样当使用RowSorter时,您将需要使用转换   convertRowIndexToView或convertRowIndexToModel

更多信息:

convertRowIndexToView

convertRowIndexToModel

<强>更新

为什么“正确”?

正如@camickr所指出的,这也适用于列。原因列可以交换。所以你需要使用

convertColumnIndexToView

convertColumnIndexToModel

答案 1 :(得分:1)

  

我在我的模型类中得到了id。

您的建议都不正确。您正在尝试获取显示为TableModel的第1列的ID。您已经假设表的列不能重新排序,这不是一个好的假设,因为表的默认行为允许用户重新排序列。

您需要了解&#34; View&#34;和&#34;模型&#34;。

int rowInTable = table.getSelectedRow();
int rowInModel = table.convertRowIndexToModel(rowInTable);

从&#34;查看&#34;获取值(即JTable)你会使用:

Object id = this.getValueAt(rowInTable, table.convertColumnIndexToView(1));

从&#34;模型&#34;获取值你会用:

Object id = this.getModel().getValueAt(rowInModel, 1);

两段代码都会返回相同的值。无论哪种情况,都需要转换一个索引。