Code
class ProgressRenderer extends DefaultTableCellRenderer {
private final JProgressBar b = new JProgressBar(0, 100);
public ProgressRenderer() {
super();
setOpaque(true);
b.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Integer i = (Integer)value;
String text = "Done";
if(i < 0) {
text = "Canceled";
}else if(i < 100) {
b.setValue(i);
return b;
}
super.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column);
return this;
}
}
final Executor executor = Executors.newCachedThreadPool();
final int rowNumber = model.getRowCount();
SwingWorker< Integer,Integer > worker=new SwingWorker< Integer,Integer >() {
private int sleepDummy = new Random().nextInt(100) + 1;
private int lengthOfTask = 120;
@Override
protected Integer doInBackground() {
int current = 0;
while(current < lengthOfTask && !isCancelled()) {
if(!table.isDisplayable()) {
return -1;
}
current++;
try {
Thread.sleep(sleepDummy);
}catch(InterruptedException ie) {
publish(-1);
break;
}
publish(100 * current / lengthOfTask);
}
return sleepDummy * lengthOfTask;
}
@Override
protected void process(java.util.List< Integer > chunks) {
for(Integer value : chunks) {
model.setValueAt(value, rowNumber, 2);
}
//model.fireTableCellUpdated(rowNumber, 2);
}
@Override
protected void done() {
String text;
int i = -1;
if(isCancelled()) {
text = "Canceled";
}else{
try{
i = get();
text = (i>=0)?"Done":"Disposed";
}catch(Exception ignore) {
ignore.printStackTrace();
text = ignore.getMessage();
}
}
System.out.println(rowNumber +":"+text+"("+i+"ms)");
}
};
model.addTest(new Test("example", 0), worker);
executor.execute(worker); //JDK 1.6.0_18
//worker.execute();
References
0 comments:
Post a Comment