0

クラスに 2 つの JTable を作成しました。

最初の JTable では、データはサーバーから arraylist に送られ、次に JTable に送られます

2 番目の JTable では、データはローカル アクセス データベースから JTable (配列リストなし) に送られます。

ユーザーがボタンをクリックすると、両方の JTable が一緒に表示されます。

ただし、インターフェイスに両方の jtable をロードして表示するには、最大 1 分かかります。

それらをより速くロードする方法はありますか?

サンプルコード 表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++;  

        }
4

2 に答える 2

3

遅延は、データベース クエリを実行するために必要な時間によって発生します。したがって、2 つの個別のクエリをそれぞれ別のスレッドで実行していることを確認して、一方のクエリが他方のクエリの完了を待たないようにする必要があります。

これは、2 つの SwingWorker を作成することで実行できます。1 つはサーバー アクセス用で、もう 1 つはローカル アクセス用です。

于 2013-03-28T15:59:39.047 に答える
2

これを介して簡単にjtableにデータをロードできます

DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
tm.addRow(new Object[] {name,age,tel});

name age tel は、column1、column2、column3 の値です

于 2013-03-28T15:55:07.027 に答える