Am writing a backup program and l want the progress to display in the cell. l have put the progress bar but it doesn't animate the new value when l use table object to set new value. Please l need an urgent help.
What I have tried:
The initializing code below. Am using DefaultTableModel
TableColumn tableCol;
<pre lang="java">tableCol = jTable1.getColumnModel().getColumn(4);
tableCol.setCellRenderer(new renderProgress());
below is a class that extends JProgressBar and implements Tablecellrenderer
import java.awt.Component;
import javax.swing.JProgressBar;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
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) {
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;
}
}
then the snipet that sets new value below (which is the bytes written)
<pre>int count=0;
byte[] bytes = new byte[1024];
int length;
int progress=0;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
count+=length;
if(fileSize>0L){
progress = (int) ((count * 100) / fileSize);
defTable.setValueAt(progress, 0, 4);
}
}
Thanks