【问题标题】:Relationship between JTable, TableModel & TableDataJTable、TableModel和TableData之间的关系
【发布时间】:2009-02-18 14:21:26
【问题描述】:

JTableTableModelTableData 之间的关系是什么?如果我只是修改TableData,那是否也会更改JTable 组件上的数据显示,或者我必须调用一些方法来同步两者。我查看了this,但它没有明确告诉或显示更新方面的关系

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    当您更改 TableModel 数据中的值时,您必须触发此事件。例如。改变一个单元格的值,你调用fireTableCellUpdated(row, col);

    更具体地查看this

    【讨论】:

    • fireTableCellUpdated(row, col) 仅适用于作为 AbstractTableModel 子类的 TableModel。
    【解决方案2】:

    在 JTable 中设置 TableModel 时,该表会添加一个观察者 (TableModelListener) 以了解模型中的更改。

    更改模型中的数据时,模型应通过触发TableModelEvent 来通知已注册的侦听器。事件本身可以包含有关更改粒度的补充信息(无论是结构显着更改,还是仅更改部分单元格数据),以允许 JTable 进行优化的视图更新。

    【讨论】:

      【解决方案3】:

      我认为您使用的短语“TableData”仅表示 JTable 中显示的数据。要回答您的问题,您是否看到自动更新取决于您的 TableModel 以及它如何与您的数据交互。

      当底层数据模型发生变化时,TableModel 应该触发事件,这反过来会通知 JTable 发生了变化并且应该重绘它。所以就关系而言,JTable 监听 TableModel 上的事件变化; TableModel 不知道 JTable。

      根据模型的组织方式,它下面的数据可能会在 TableModel 不知道的情况下发生变化。在这种情况下,如果您有从 TableModel 到数据的直接传递,当自然发生重绘(屏幕调整大小、鼠标移动等)时,屏幕上的值会发生变化,但如果您想强制事件,您应该得到TableModel 通过上述事件通知 JTable。在关系方面,TableModel 知道表数据,但表数据不知道模型(通常)。 TableModel 可能会也可能不会监听数据的变化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 2016-06-10
        相关资源
        最近更新 更多