evaboy Ответов: 0

Как я могу сделать прогресс бар, чтобы обновить прогресс в 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);
                        }
		}
Спасибо

0 Ответов