gpt4 book ai didi

java - fireTableDataChanged 对 JTable 没有影响

转载 作者:行者123 更新时间:2023-11-30 11:51:51 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com