【发布时间】:2014-09-04 19:04:42
【问题描述】:
我在使用 JTable 时遇到了奇怪的问题。方法addRows 不会强制jTable 更新其视图:
public class VirusTable extends JTable {
private String[] columnNames = { "", "Virus", "Path", "Size", "Created", "Last Mofified" };
DefaultTableModel tableModel;
public VirusTable() {
super();
tableModel = (DefaultTableModel) super.getModel();
tableModel.setColumnIdentifiers(columnNames);
// super.setFillsViewportHeight(true);
// super.setIntercellSpacing(new Dimension(5, 5));
// super.setRowSelectionAllowed(false);
// super.setColumnSelectionAllowed(false);
}
public void addRows(Collection<UserFile> viruses) {
System.out.println("AddRows=" + viruses);
for (UserFile virus : viruses) {
tableModel.addRow(virus.toRowData());
}
// tableModel.fireTableDataChanged();
// tableModel.fireTableStructureChanged();
int rowCount = super.getRowCount();
// super.revalidate();
// super.repaint();
System.out.println("rowCount=" + rowCount);
}
}
addRows 方法是从SwingWorker.process 方法调用的。
有趣的是,rowCount 始终是正确的,但 JTable 上不显示行。
我尝试了一切,但没有任何帮助。 我想创建简短的可运行演示,但我无法实现此错误。
我发布了这个项目on github 并描述了那里的问题。
【问题讨论】:
-
如果您无法在简短的演示中实现该错误,那么该错误可能发生在其他地方?
-
您能建议什么可能会阻止 jTable 刷新视图吗?
-
Can you suggest what might prevent jTable from refreshing view?也许您有两个 JTable 实例。您添加到 GUI 的一个,以及您尝试更新数据的另一个。如果没有正确的SSCCE,这一切都只是一个疯狂的猜测。 -
如果你想试试我的项目,它在 github here
-
@camickr 你今天赢得了心理问题解决奖 - 令人惊讶的是,你用给出的信息猜到了这个问题的根本原因 - 太棒了!
标签: java swing jtable swingworker