我正在處理一個項目,並且在while循環中將行添加到JTable中。Swing JTable更新
我的方案是這樣的: -
一旦用戶點擊一個按鈕程序進入一個while()循環,並開始通過一個添加行到JTable之一的DefaultTableModel直到while循環終止。 但問題是隻有在while循環結束後,表纔會更新數據。我希望在添加每行後將其更新並在UI上顯示。
這將是非常好的,如果有人可以幫助我這提供了一個解決方案
我已經嘗試重繪()將每行之後,但沒有奏效。
我正在處理一個項目,並且在while循環中將行添加到JTable中。Swing JTable更新
我的方案是這樣的: -
一旦用戶點擊一個按鈕程序進入一個while()循環,並開始通過一個添加行到JTable之一的DefaultTableModel直到while循環終止。 但問題是隻有在while循環結束後,表纔會更新數據。我希望在添加每行後將其更新並在UI上顯示。
這將是非常好的,如果有人可以幫助我這提供了一個解決方案
我已經嘗試重繪()將每行之後,但沒有奏效。
您需要在單獨的線程中運行您的操作,然後在gui線程中更新JTable。類似這樣的:
public void someButtonClicked(params...) {
new Thread(new Runnable() {
public void run() {
longOperation();
}
}).start();
}
public void longOperation() {
for(int i=0; i<1000; i++) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// add new row to jtable
}
});
}
}
如果您的整個while循環在Swing事件分派線程上運行以響應按鈕單擊事件,則線程將不會自由更新屏幕上的視圖,直到事件處理代碼完成(您的結束actionPerformed方法)。
我不確定你要在這裏完成什麼 - 動畫也許?你可以使用Swing的Timer類(javax.swing.Timer)來重複觸發一個事件,在觸發之間有一個小的延遲,並且爲了響應每個事件,你可以在表中添加一行。只要事件處理代碼響應每個事件觸發而迅速退出,Swing應該能夠在事件之間重新繪製視圖。你真的需要很好地理解Swing的線程模型,或者這些類型的問題真的很混亂。這並不難 - 如果您搜索了例如「 「Swing事件線程」。 ()和其他方法(如validate()等)只會將組件標記爲需要重新繪製 - 組件不會實際上在屏幕上進行重新繪製,直到Swing有機會做到這一點,並且如果您在while循環中陷印Swing線程,則在完成循環和事件處理代碼完成之前,繪畫將不會自由進行繪製。
我想你應該去經常更新行。有一個名爲「聖誕樹」的太陽教程。這裏是鏈接進行
http://java.sun.com/products/jfc/tsc/articles/ChristmasTree/
上面的鏈接將幫助您JTable中經常更新的行。
你的while循環需要多長時間? – 2010-11-11 06:40:22