2011-08-31 93 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