【问题标题】:Recreate Jtable or remove all rows and add new rows?重新创建 Jtable 或删除所有行并添加新行?
【发布时间】:2017-12-13 01:22:58
【问题描述】:

我有一个 JTable 和一个 DefaultTableModel,我想每 3 秒删除一次 JTable 的所有行并向 JTable 添加新行。考虑到性能,最好的选择是什么,重新创建 Jtable 或删除所有行并添加行?

【问题讨论】:

  • "renew Jtable.." 什么意思? "..or remove all rows and addrows" 这就是我所追求的方法。

标签: java swing jtable defaulttablemodel


【解决方案1】:

最好的选择是什么,更新 Jtable 或删除所有行和添加行?

如果您重新创建 JTable,将为该表重新创建所有渲染器和编辑器。

如果更改 TableModel,则表将需​​要重新创建 TableColumnModel,以及基于新 TableModel 的所有 TableColumn。

将需要创建更多对象来支持 JTable/TableModel 关系。

删除行和添加行只会导致表格使用所有当前渲染器重新绘制新数据。我会说这更有效。而不是一次添加一行,您应该一次添加所有行

【讨论】:

  • 如何一次添加所有行?
  • DefaultTableMode 让您可以访问保存数据行的“dataVector”变量。因此,您扩展 DefaultTableModel 以创建一个自定义方法:1) 删除所有行 2) 将所有数据行添加到 dataVector 3) 调用 fireTableDataChanged(...) 方法。
【解决方案2】:

您可以创建一个表格模型来挖掘您的数据对象。一旦更改了基础数据对象,就调用 fireTableDataChanged()。

来自 AbstractTableModel#fireTableDataChanged() 的 JavaDoc:

通知所有侦听器表格行中的所有单元格值可能已更改。行数也可能发生了变化,JTable 应该从头开始重新绘制表格。假设表的结构(如列的顺序)是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多