0
我試圖創建一個jTable,一旦單擊按鈕,一次只添加一行數字,只是一個從零開始的數字,並繼續添加行直到它獲取行1000000.我正在使用SwingWorker的doInBackground,發佈和處理方法來增加行計數器,並添加每一行,這意味着gui不凍結,而行正在添加。但是,當我運行時,我可以看到行號增加,但它只增加一行並不斷改變這一行,即一行被添加到表中,並且其行號增加,所以我最終以一行結束數量爲1000000.下面是我的SwingWorker代碼,任何hep都會非常感謝,這個問題一直讓我失眠! :/使用SwingWorker將行添加到jTable並更新GUI
//inside the button's ActionPerformed method
SwingWorker<Vector, Vector> worker = new SwingWorker<Vector, Vector>() {
@Override
protected Vector doInBackground()
{
int i = 0;
Vector v = new Vector();
//while(!isCancelled())
while(i < 100000000)
{
v.clear();
//v = gen.runAlgorithm2();
v.add(i);
i++;
publish(v);
}
return v;
}
@Override
protected void process(List rowsList)
{
if(rowsList.size() > 0)
{
Vector row = (Vector)rowsList.get(rowsList.size() - 1);
DefaultTableModel tModel = (DefaultTableModel)jTable1.getModel();
//tModel.insertRow(0, row);
tModel.addRow(row);
}
}
};
worker.execute();
非常感謝您的回覆,這解決了只有一行被添加到表中的問題。但是,現在行數每行之間增加了幾千,我知道這是因爲每次調用publish()時都不會運行該過程方法,並且這些向量排隊直到調用過程。我不知道如何克服這一點,並添加每一行,從0 - 1000000. – KingCong 2010-02-27 19:55:17
再次感謝您的幫助,它解決了問題! – KingCong 2010-02-28 00:31:13