JTable和Table模型何时使用?

时间:2012-09-05 04:32:08

标签: java swing jtable tablemodel defaulttablemodel

我对这两者之间的区别有所了解。但是,我对何时何时使用感到困惑。我才知道,

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

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

2 个答案:

答案 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的实现中看到。它询问模型中的值,但首先将行和列索引从“视图坐标”转换为“模型坐标”。