逐行显示JTable [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逐行显示JTable [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
如何让我的JTable
逐行显示我的数据?由于我的数据可能很大,最多有数千行,我想逐行显示,以便用户可以看到它被填充。
我尝试了许多不同的方式,如paint
,repaint
,validate
,所有的model.fire
......以及更多,但我的表只显示了最后添加所有内容后的数据。我是如何做这个方法的一个例子:
public void updateTableRowByRow(String row) {
// length of row always equals cols
int cols = 16;
int i = 0;
DefaultTableModel model = (DefaultTableModel) gui.myTable.getModel();
Vector<String> rowData = new Vector<String>();
for (int c = 0; c < cols; c++) {
rowData.add(String.valueOf(row.charAt(i++)));
}
model.addRow(rowData);
// tried many things here to get it to refresh but nothing worked
}
在我调用此方法之前,我会清除该表:
DefaultTableModel model = (DefaultTableModel) gui.myTable.getModel();
model.setRowCount(0); // delete all
答案
我的表只显示最后添加所有内容后的数据
...
我的问题是在将数据添加到表中之前对数据进行预处理。我正在读取文件,转换其内容,然后将该内容添加到表中。
您正在对事件调度线程(EDT)进行处理,这会阻止GUI重新绘制,直到任务完成。
您需要使用单独的线程来预处理数据。这将允许GUI在将新数据添加到表模型时重新绘制自身。
最简单的方法是使用SwingWorker。 Swing worker允许您在单独的Thread中处理数据,然后“发布”数据,以便可以在GUI中显示。
阅读Concurrency in Swing上Swing教程中的部分,了解更多信息和工作示例。
以上是关于逐行显示JTable [重复]的主要内容,如果未能解决你的问题,请参考以下文章