逐行显示JTable

时间:2017-12-24 07:08:31

标签: java swing jtable

如何让我的JTable逐行显示我的数据?由于我的数据量很大,最多有数千行,我想逐行显示,以便用户可以看到它被填充。

我尝试了很多不同的方法,例如paintrepaintvalidate,所有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

1 个答案:

答案 0 :(得分:0)

  

我的表格仅显示最后添加所有内容后的数据

     

...

     

我的问题是在将数据添加到表中之前对数据进行预处理。我正在读取一个文件,转换其内容,然后将该内容添加到表中。

您正在对事件调度线程(EDT)进行处理,这会阻止GUI重新绘制,直到任务完成。

您需要使用单独的线程来预处理数据。这将允许GUI在将新数据添加到表模型时重新绘制自己。

最简单的方法是使用SwingWorker。 Swing工作者允许您在单独的线程中处理数据,然后发布&#34;数据,以便它可以在GUI中显示。

阅读Concurrency in Swing上Swing教程中的部分,了解更多信息和工作示例。