从表格中获取单元格值是正确的:
int rowInTable = table.getSelectedRow();
int rowInModel = table.convertRowIndexToModel(rowInTable);
Object id = this.getValueAt(rowInModel,1);
或者:
Object id = this.getValueAt(rowInTable,1);
我进入id
我的模型班。
这是“正确”的一个。
int rowInTable = table.getSelectedRow();
int rowInModel = table.convertRowIndexToModel(rowInTable);
Object id = this.getValueAt(rowInModel,1);
这是需要的,因为排序和过滤。模型对视图一无所知。因此,当您尝试通过视图索引访问模型索引时,您必须对其进行转换。来自JTable
同样,当使用 RowSorter 提供的排序和过滤功能时,底层 TableModel 不需要知道如何进行排序,而是 RowSorter 会处理它。当使用 JTable 的基于行的方法和底层的 TableModel 时,坐标转换是必要的。所有 JTables 基于行的方法都是基于 RowSorter 的,它不一定与底层的 TableModel 相同。例如,选择始终根据 JTable 进行,因此在使用 RowSorter 时,您需要使用 convertRowIndexToView 或 convertRowIndexToModel 进行转换。
更多信息:
更新
为什么要“正确”?
正如@camickr 指出的那样,这也适用于列。因为列可以交换。所以你需要使用
我在我的模型类中获得了 id。
您的任何建议都不正确。您正在尝试获取似乎是 TableModel 的第 1 列的 ID。您假设表的列不能重新排序,这不是一个好的假设,因为表的默认行为允许用户重新排序列。
您需要了解“视图”和“模型”之间的区别。
int rowInTable = table.getSelectedRow();
int rowInModel = table.convertRowIndexToModel(rowInTable);
要从“视图”(即 JTable)中获取值,您可以使用:
Object id = this.getValueAt(rowInTable, table.convertColumnIndexToView(1));
要从“模型”中获取值,您将使用:
Object id = this.getModel().getValueAt(rowInModel, 1);
两段代码都将返回相同的值。无论哪种情况,都需要转换一个索引。