如何更快地加载JTable



我已经在我的类中创建了2个JTable

对于第一个JTable,数据从服务器到arraylist,然后到JTable

对于第二个JTable,数据来自本地访问数据库到JTable(没有数组列表)

当用户单击一个按钮时,两个JTables将一起显示。

但是在界面上加载和显示这两个jtable需要1min。

有什么方法可以更快地加载它们吗?

示例代码表1
data = new ArrayList<Person>();
try
    {
        conn = dc.getConnection();
        stmt = conn.prepareStatement(query);
        rs = stmt.executeQuery();
        while(rs.next())
        {
             String[] rowData = new String[4];
            for(int i=1;i<=4;i++)
            {
                rowData[i-1] = rs.getString(i);                    
            }
            //database to arraylist
            data.add(new Person(rowData[0],rowData[1],rowData[2],rowData[3]));
        }
String[] colNames = {"LastName","FirstName","Email","Department"};
model = new DefaultTableModel(colNames,data.size())
sorter = new TableRowSorter<TableModel>(model);
    int row = 0;
    //arraylist to JTable
    for(Person p:data)
    {
        model.setValueAt(p.lastName, row, 0);
        model.setValueAt(p.firstName, row, 1);
        model.setValueAt(p.email, row, 2);
        model.setValueAt(p.dept, row, 3);
        row++;
    }
    table.setModel(model);
    table.setRowSorter(sorter);

表2

示例代码
String[] colNames = {"Name","Email","Department","Status"};
model = new DefaultTableModel(colNames,500);
table.setModel(model); 
try
    {
        conn = ac.getConnection();
        stmt = conn.prepareStatement(insert);
        rs = stmt.executeQuery();
        int row = 0;   
        while(rs.next())
        {
            String[] rowData = new String[4];
            for(int i=1;i<=4;i++)
            {
                rowData[i-1] = rs.getString(i);
            }
            //access database to jTable
            model.setValueAt(rowData[0], row, 0);
            model.setValueAt(rowData[1], row, 1);
            model.setValueAt(rowData[2], row, 2);                
            model.setValueAt(rowData[3], row, 3);                
            row++;  
        }

延迟是由执行数据库查询所需的时间引起的。所以你要确保你正在做两个单独的查询,每个查询在不同的线程上,所以一个查询不会等待另一个完成。

这可以通过创建2个SwingWorkers来实现,一个用于服务器访问,另一个用于本地访问。

您可以通过这个

轻松地将数据加载到jtable中
DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
tm.addRow(new Object[] {name,age,tel});

name age tel are values in column1, column2, column3

最新更新