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

Java 使用rowInModel或rowInTable获取JTable单元格值?,java,swing,jtable,Java,Swing,Jtable,对于从表中获取单元格值,以下哪项是正确的: int rowInTable = table.getSelectedRow(); int rowInModel = table.convertRowIndexToModel(rowInTable); Object id = this.getValueAt(rowInModel,1); 或: 我在模型课上得到了id。这是“正确”的 这是必要的,因为排序和筛选。模型对视图一无所知。所以,当您试图通过视图索引访问模型索引时,必须对其进行转换。 从 同样

对于从表中获取单元格值,以下哪项是正确的:

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


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

我在模型课上得到了
id

这是“正确”的

这是必要的,因为排序和筛选。模型对视图一无所知。所以,当您试图通过视图索引访问模型索引时,必须对其进行转换。 从

同样,在使用提供的排序和筛选功能时 通过RowSorter底层的TableModel不需要知道如何做 分拣,而不是由分拣机来处理。坐标转换将 在使用JTable的基于行的方法时 基础表格模型所有基于JTables行的方法都是 行分拣机的,这不一定与 基础表格模型。例如,所选内容始终以术语表示 使用行分类器时,您需要使用 convertRowIndexToView或convertRowIndexToModel

更多信息:

更新

为什么“正确”

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

我在模型课上得到了身份证

你的两个建议都不对。您试图获取的ID似乎是TableModel的第1列。您假设表中的列无法重新排序,这不是一个好的假设,因为表的默认行为允许用户对列重新排序

您需要理解“视图”和“模型”之间的区别

要从“视图”(即JTable)中获取值,您可以使用:

Object id = this.getValueAt(rowInTable, table.convertColumnIndexToView(1));
Object id = this.getModel().getValueAt(rowInModel, 1);
要从“模型”中获取值,请使用:

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

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

@sajjid,从问题的精神来看,这个答案是合理的,但并不完整。假设这个答案假设表可能被排序或过滤,那么答案还应该假设TableColumns可以被重新排序,在这种情况下,不适合硬编码columns值来检索ID值。请看我的完整解决方案。这两个建议都不完全正确。
Object id = this.getModel().getValueAt(rowInModel, 1);