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);