在JTable中加载进度条及进行操作

本文介绍了一个使用Swing和SwingWorker在JTable中加载进度条的示例,用于在多文件下载或多事务处理时显示进度。通过自定义的MyTableModel和ProgressRenderer类,实现了在表格中动态更新进度的功能。示例包括两个java文件:MyTableModel.java和MyPanel.java,涉及线程处理、表格渲染和用户交互。
摘要由CSDN通过智能技术生成
  我们在多文件下载或多事务处理时,经常会出现使用线程以提高效率的情况,而这时在GUI程序中如何表示进度,就成了一个不大不小的问题。
  现在比较被大众接受的方式,大体就是如迅雷等下载工具中一样,用表格中加载进度条以进行显示。
  而对于Swing来说,并没有现成的组件能够实现这一操作,还有下载的并发,似乎也需要额外进行处理。于是,我在此提供一个基于jdk1.6版本的示例,以供参考。(因为jdk1.6提供了SwingWorker,简化了图形程序中的线程处理,使用其他jdk开发请替换此项即可)

本示例由两个java文件组成

MyTableModel.java
package  org.loon.test;

import  java.awt.Component;
import  java.util.HashMap;
import  java.util.Map;

import  javax.swing.BorderFactory;
import  javax.swing.JProgressBar;
import  javax.swing.JTable;
import  javax.swing.SwingWorker;
import  javax.swing.table.DefaultTableCellRenderer;
import  javax.swing.table.DefaultTableModel;

/**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * 
 * 
@author chenpeng
 * @email:ceponline@yahoo.com.cn
 * 
@version 0.1
 
*/

public   class  MyTableModel  extends  DefaultTableModel  {
    
/**
     * 
     
*/

    
private static final long serialVersionUID = 1L;

    
private static final ColumnContext[] columnArray = {
            
new ColumnContext("ID", Integer.classfalse),
            
new ColumnContext("名称", String.classfalse),
            
new ColumnContext("进度", Integer.classfalse) }
;

    
private final Map<Integer, SwingWorker> swmap = new HashMap<Integer, SwingWorker>();

    
private int number = 0;

    
public void addTest(Test t, SwingWorker worker) {
        Object[] obj 
= new Integer(number), t.getName(), t.getProgress() };
        
super.addRow(obj);
        swmap.put(number, worker);
        number
++;
    }


    
public synchronized SwingWorker getSwingWorker(int identifier) {
        Integer key 
= (Integer) getValueAt(identifier, 0);
        
return swmap.get(key);
    }


    
public Test getTest(int identifier) {
        
return new Test((String) getValueAt(identifier, 1),
                (Integer) getValueAt(identifier, 
2));
    }


    
public boolean isCellEditable(int row, int col) {
        
return columnArray[col].isEditable;
    }



    
public Class<?> getColumnClass(int modelIndex) {
        
return columnArray[modelIndex].columnClass;
    }


    
public int getColumnCount() {
        
return columnArray.length;
    }


    
public String getColumnName(int modelIndex) {
        
return columnArray[modelIndex].columnName;
    }


    
private static class ColumnContext {
        
public final String columnName;

        
public final Class columnClass;

        
public final boolean isEditable;

        
public ColumnContext(String columnName, Class columnClass,
                
boolean isEditable) {
            
this.columnName = columnName;
            
this.columnClass = columnClass;
            
this.isEditable = isEditable;
        }

    }

}


class  Test  {
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值