2010-02-26 91 views
1

我有一個jTable和一個jButton。單擊時,按鈕的actionPerformed方法將調用另一個包含while循環的方法,並在每次通過循環時向表的模型(DefaultTableModel)添加一行。 while循環可以運行幾分鐘,所以我希望它在GUI中顯示每次添加到表中的行,一個接一個。然而,現在它在循環結束後將所有行一起添加到表中,因此在幾分鐘的時間內逐個遞增行數,而不是從顯示具有0行的表的幾分鐘到然後立即擁有數千人。我已經嘗試調用updateUI,在表格上重新繪製等,以及在模型上調用fireTabledDataChanged等,但沒有任何區別。我也嘗試過使用Swing Timer但無濟於事。我會很感激提供的任何幫助或指導,謝謝。向jTable中添加一行,每次通過一個循環?

回答

3

下降到EDT一個Runnable履行addRow電話從Swing閱讀節關於Concurrency的教程,更詳細地解釋了EDT如何工作。除了創建自己的線程並使用SwingUtilties.invokeLater()之外,還可以使用更新的使用SwingWorker的方法。本教程包含一個示例。

我已經打過電話updateUI,

決不做這樣的事情。即使它解決了你的問題,但這是錯誤的解決方案。您不更新UI,您正在更新組件。

1

如果您使用的是DefaultTableModel,則在每次迭代期間在模型上調用addRow應更新模型,然後應更新JTable。該表將要求重新粉刷,並且該請求將在美國東部時間發佈。不幸的是,您的長期運行流程阻止了在美國東區執行處理的其他請求。爲你做的最好的事情是有你的按鈕,在工作線程觸發過程,然後該線程可能在這被通過SwingUtilities.invokeLater

+1

當我看到你發佈你的答案時,我的答案應該幾乎完全一樣:) - 所以我只是給你+1 – 2010-02-26 20:04:07