我对这两者之间的区别有所了解。但是,我对何时何时使用感到困惑。我才知道,
我们可以从视图和模型中获取表的值。这是我感到困惑的地方。如果发生任何类似(行选择)的事件,那么我必须从中获取值?是从视图还是模型?考虑到JTable的排序和过滤,最佳实践是什么?
答案 0 :(得分:4)
您可以从表格模型中获取值,也可以从JTable
实例本身获取值;最终结果是一样的。 JTable getValueAt
和相关方法都只是在内部表模型对象上调用相同的方法。
JTable#getValueAt(int, int) source code:
public Object getValueAt(int row, int column) {
return getModel().getValueAt(convertRowIndexToModel(row),
convertColumnIndexToModel(column));
}
答案 1 :(得分:1)
我的经验法则是我从发生变化的元素中检索数据(通常是事件的来源)。如果您在行选择中更改了示例,我会从表中检索数据,因为选择与视图相关。
这是为了避免我不使用正确的行/列。在行选择的示例中,完全有可能在视图侧(JTable
)对数据进行排序,而模型侧未更改(TableModel
)。在这种情况下,如果我收到第5行被选中的事件,则表示JTable
中的第5行而不是TableModel
中的第5行。
这可以在@Vulcan的答案中公布的getValueAt
的实现中看到。它询问模型中的值,但首先将行和列索引从“视图坐标”转换为“模型坐标”。