Как я могу сделать прогресс бар, чтобы обновить прогресс в jtable, выполните следующие действия
Я пишу программу резервного копирования и хочу, чтобы прогресс отображался в ячейке. l поставил индикатор выполнения, но он не анимирует новое значение, когда l использует объект таблицы для установки нового значения. Пожалуйста, мне нужна срочная помощь.
Что я уже пробовал:
The initializing code below. Am using DefaultTableModel TableColumn tableCol; <pre lang="java">tableCol = jTable1.getColumnModel().getColumn(4); tableCol.setCellRenderer(new renderProgress());
ниже приведен класс, который расширяет JProgressBar и реализует Tablecellrenderer
import java.awt.Component; import javax.swing.JProgressBar; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author slab1 */ public class renderProgress extends JProgressBar implements TableCellRenderer{ public renderProgress(){ super(0,100); setValue(0); setString("0%"); setStringPainted(true); } @Override public boolean isDisplayable(){ return true; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //value is a percentage e.g. 95% final String sValue = value.toString(); int index = sValue.indexOf('%'); if (index != -1) { int p = 0; try{ p = Integer.parseInt(sValue.substring(0, index)); } catch(NumberFormatException e){ } setValue(p); setString(sValue); } return this; } }
затем снипет, который устанавливает новое значение ниже (которое является записанными байтами)
<pre>int count=0; byte[] bytes = new byte[1024]; int length; int progress=0; while ((length = fis.read(bytes)) >= 0) { // jTable1.getModel().setValueAt(length +"%".toString(), WIDTH, 4); zos.write(bytes, 0, length); count+=length; // for(int i =0; i<100; i++){ // jTable1.setValueAt(i, 0, 4);//Object of the table model to set new value to the table column // } if(fileSize>0L){ progress = (int) ((count * 100) / fileSize); defTable.setValueAt(progress, 0, 4); } }Спасибо