1

我对这两者之间的区别有一些想法。但是,我对何时使用时有些困惑。我只知道,

  • 要显示 JTable,请创建一个 JTable 并为其设置相应的表模型。
  • 任何时候,如果我们想更改该表中的数据,更改模型中的数据,那么更改将反映在视图中。

我们可以从视图和模型中获取表的值。这是我感到困惑的地方。如果发生任何像(行选择)这样的事件,那么我必须从中获取值?是从视图还是模型?考虑到 JTable 的排序和过滤,最佳实践是什么?

4

2 回答 2

5

您可以从表的模型或JTable实例本身中获取值;最终结果是一样的。JTablegetValueAt和相关的方法都只是简单地在内部表模型对象上调用相同的方法。

JTable#getValueAt(int, int) 源代码

public Object getValueAt(int row, int column) {
    return getModel().getValueAt(convertRowIndexToModel(row),
                                 convertColumnIndexToModel(column));
}
于 2012-09-05T04:39:53.863 回答
1

我的经验法则是从发生更改的元素(通常是事件源)中检索数据。在您的行选择更改示例的情况下,我从表中检索数据,因为选择与视图相关。

这是为了避免我没有使用正确的行/列。在行选择的示例中,数据完全有可能在视图端(在 中JTable)排序,而模型端没有改变(在 中TableModel)。JTable在这种情况下,如果我收到选择第 5 行的事件,则表示第 5 行在TableModel.

这可以在getValueAt@Vulcan 的答案中发布的实现中看到。它询问模型的值,但首先将行和列索引从“视图坐标”转换为“模型坐标”。

于 2012-09-05T08:02:45.480 回答