Обновление JProgressBar - PullRequest
       20

Обновление JProgressBar

1 голос
/ 31 августа 2011

Может ли кто-нибудь мне помочь? Буду признателен. У меня есть пример кода:

....
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 ?

Ответы [ 2 ]

3 голосов
/ 31 августа 2011

В табличной модели вашего JTable должен быть столбец «Ход загрузки», содержащий значение процента загрузки (т. Е. Число от 0 до 100).

Вы должны связать пользовательское средство визуализации ячеек таблицы с этим столбцом.Средство визуализации будет использовать индикатор выполнения для отображения процента, содержащегося в ячейке таблицы (то есть аргумент value уникального метода TableCellRenderer).

Чтобы обновить индикатор выполнения, вы должны установить новое значение для соответствующей ячейки в модели таблицы.Затем это изменение сгенерирует TableModelEvent (оно выполняется автоматически с DefaultTableModel, но вы должны позвонить fireTableCellUpdated, если подклассы AbstractTableModel).Событие будет «перехвачено» JTable, которое обновит значение и, таким образом, вызовет ваше средство визуализации с новым значением для отображения.

Прочитайте руководство по swing о таблицах .

2 голосов
/ 31 августа 2011

Не совсем уверен, что понимаю ваш вопрос, но вот с чего начать ...

Предполагается, что вы не выполняете загрузки в потоке отправки (что было бы плохой идеей) следующего вызова:

prog.setValue((int) wartosc);

, вероятно, необходимо обернуть в SwingUtilities.invokeLater.

Это связано с тем, что Swing небезопасен для потоков и доступ к объекту инфраструктуры Swing необходим из одного потока.

...