java - fireTableDataChanged 对 JTable 没有影响

标签 java swing user-interface jtable

我在 Java Swing 中更新 JTable 时遇到问题。

我想要显示的数据每秒变化几次,我正在寻找一种有效的方法来更新 JTable 中的数据。

我使用方法 setModel() 来更新数据,它有效,但它有两个缺点:

  1. 如果用户调整标题中表格列的大小,那么他将得到大约 10 个异常(我认为是因为该模型不再可用,因为它每秒更改几次)

  2. 每次数据(以及 TableModel)更改时,调整大小的列(以像素为单位)的长度信息都会丢失。

对于 TableModel,我使用我自己的模型 ResultSetTableModel,它扩展了 AbstractTableModel。 此 ResultSetTableModel 具有方法 setResultSet(ResultSet rs) 并覆盖方法 getValueAt(x,y)...

正如我所说,如果我将一个新的 ResultSet 设置到我的 ResultSetTableModel,然后通过方法 setModel(resultSetTableModel) 将它添加到 JTable,它可以工作,但它有我所说的 2 个缺点。

所以我认为我可以使用 fireTableDataChanged() 方法解决这个问题,但我尝试了很多可能性但没有得到任何改变。

你知道我必须在哪里放置火器吗?

目前我尝试这样做,但它不起作用,我不知道为什么:

private ResultSetTableModel resultSetTableModel;
private DataFetcher dataFetcher;
private JTable table;

...

//works fine
public void initaialUpdateTable() {
    resultSetTableModel = new CachingResultSetTableModel(dataFetcher.getRS());
    table.setModel(resultSetTableModel);
}

//does not work
public void updateTable(){
    resultSetTableModel.setResultSet(dataFetcher.getRS());
    resultSetTableModel.fireTableDataChanged();
}

如果我每次都调用 initaialUpdateTable(),它工作正常,但我希望只是数据发生变化而不是整个模型

感谢您的回答

迈克尔

最佳答案

but i want that just the data changes and not the whole model

嗯,我怎么能...,没有只有一个...

1) 你在GUI中可以看到的东西是TableView,只有表现层,所有数据总是存储在TableModel

2) 如果你没有声明任何TableModel,这并不意味着不存在,仍然存在DefaultTableModel

3) 你的 private ResultSetTableModel resultSetTableModel; 必须扩展 AbstractTableModel,

4) 如果您要阻止任何 fireXxxXxxChanged();,则不会有任何更改返回到 TableView

5) 基础知识 here , 开始于 fireTableCellUpdated(row, col);

编辑

关于 TableModels 的更多信息 here , here或搜索 ResultSetTableModelTableFromDatabase

关于java - fireTableDataChanged 对 JTable 没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210532/

相关文章:

java - 这个自定义阵列适配器有什么问题?

java - 我可以在 JTabbedPane 中将一些选项卡放在左侧,将其他选项卡放在右侧吗?

java - org.jdesktop.swingbinding.JTableBinding$BindingTableModel 无法转换为 javax.swing.table.DefaultTableModel

unit-testing - 测试 Web 应用程序的 UI?

android - 为什么我们需要拉动刷新移动应用程序?

javascript - 希望使用 angularjs 创建类似功能的 gmail 附件预览

java - JAX-RS 在运行时更改 @XmlRootElement.name

java:如何为变量自动生成自定义方法

java - 这个 reinterpret_cast 是如何工作的? (将 C++ 移植到 Java)

java - 在用户界面上执行突变测试是好的做法吗?