从表中获取单元格值是正确的:
int rowInTable = table.getSelectedRow();
int rowInModel = table.convertRowIndexToModel(rowInTable);
Object id = this.getValueAt(rowInModel,1);
或者:
Object id = this.getValueAt(rowInTable,1);
我在我的模型类中得到id
。
答案 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 。
更多信息:
<强>更新强>
为什么“正确”?
正如@camickr所指出的,这也适用于列。原因列可以交换。所以你需要使用
答案 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);
两段代码都会返回相同的值。无论哪种情况,都需要转换一个索引。