2011-08-31 71 views
1

有人可以幫我嗎?我會很感激。 我有示例代碼:JProgressBar更新

.... 
int sizeFile; 
RandomAccessFile raf; 
InputStream in; 
int val= 0; 
int downloaded= 0;      
while((val=in.read(buff)) != -1) 
{    
raf.write(buff, 0, val);  
downloaded+= val;    
float wartosc = ((float) downloaded/ sizeFile) * 100; 
prog.setValue((int)wartosc);     
} 

我的問題是如何把JProgressBar的細胞表,更新變量wartosc

+1

重複:http://stackoverflow.com/questions/7239410/jprogressbar-in-jtable-problem - 請不要重新開始,如果你不明白答案;-)你是浪費每個人的時間,你的包括 - 坐下來學習JTable如何工作的概念... – kleopatra

+0

@kleopatra論壇是人們自我幫助的地方,網絡中的這些教程不包含對我的問題的幫助。如果你沒有更好的幫助,不要說什麼,不要教我,我該怎麼做。 – pneumatic

+1

實際上,他們會這樣做(如果您將他們與您在第一個線索中得到的答案結合起來)。你對這種幫助是正確的 - 強調的是「自己」,這也包括你的努力。 – kleopatra

回答

2

不能完全確定我明白你的問題,但這裏的東西下手......

假設你沒有做調度線程下載(這將是一個壞主意)以下調用:

prog.setValue((int) wartosc); 

可能需要包裝在SwingUtilities.invokeLater

這是因爲Swing是線程不安全的,Swing框架的對象需要從一個線程訪問。

3

您的JTable的表格模型應該有一個列「下載進度」,並保留下載百分比值(即0到100之間的數字)。

您應該將自定義表格單元格渲染器與此列相關聯。渲染器將​​使用進度條顯示錶格單元格中包含的百分比(即TableCellRenderer的唯一方法的value參數)。

要更新進度欄,您應該爲表模型中適當的單元格設置一個新值。然後,此更改將觸發TableModelEvent(這是通過DefaultTableModel自動完成的,但如果您繼承AbstractTableModel,則必須致電fireTableCellUpdated)。該事件將被JTable「捕獲」,它將刷新該值並因此調用渲染器以顯示新值。

閱讀swing tutorial about tables

+1

+1有一個很好的例子[這裏](http://stackoverflow.com/questions/7036036/adding-multiple-jprogressbar-to-tablecolumn-of-jtable/7036206#7036206)。 – trashgod