JTable
a和TableModel
之间有什么关系TableData
?如果我只是修改TableData
, 是否也会更改组件上的数据显示,JTable
或者我必须调用一些方法来同步两者。我看过这个,但它没有明确告诉或显示更新方面的关系
3 回答
当您更改 TableModel 数据中的值时,您必须触发此事件。例如。更改一个单元格的值,您调用fireTableCellUpdated(row, col);
.
更具体地看这个。
我假设您使用的短语“TableData”仅表示 JTable 中显示的数据。要回答您的问题,您是否看到自动更新取决于您的 TableModel 以及它如何与您的数据交互。
当底层数据模型发生变化时,TableModel 应该触发事件,这反过来会通知 JTable 发生了变化并且应该重绘它。所以就关系而言,JTable 监听 TableModel 上的事件变化;TableModel 不了解 JTable。
根据模型的组织方式,它下面的数据可能会在 TableModel 不知道的情况下发生变化。在这种情况下,如果您有从 TableModel 到数据的直接传递,当自然发生重绘(屏幕调整大小、鼠标移动等)时,屏幕上的值会发生变化,但是如果您想强制事件,您应该得到TableModel 通过上述事件通知 JTable。在关系方面,TableModel 知道表数据,但表数据不知道模型(通常)。TableModel 可能会也可能不会监听数据的变化。
在 JTable 中设置 TableModel 时,该表会添加一个观察者 ( TableModelListener ) 以了解模型中的更改。
当更改模型中的数据时,模型应该通过触发TableModelEvent来通知注册的侦听器。事件本身可以包含有关更改粒度的补充信息(无论是结构显着更改,还是仅更改某些单元格数据),以允许 JTable 进行优化的视图更新。