2

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

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


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

或者:

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

我进入id我的模型班。

4

2 回答 2

4

这是“正确”的一个。

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 进行转换

更多信息:

convertRowIndexToView

convertRowIndexToModel

更新

为什么要“正确”?

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

convertColumnIndexToView

convertColumnIndexToModel

于 2013-09-21T22:23:22.597 回答
1

我在我的模型类中获得了 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);

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

于 2013-09-22T18:55:18.473 回答