java多线程下载工具(二)

原创 2012年03月29日 17:26:41

2、资源列表(JTable)的实现,

这是整个主界面的重点也是难点!!!我将尽可能的详细介绍,希望能够将清楚。

由于jTable中的每一列的数据(状态、进度、下载速度、已下载、已用时间、剩余时间)都是动态的,所以这里也需要设置渲染器,而且进度条的渲染器与其他列的不同。

 

首先设这进度条的渲染器:

/**
 * 进度条渲染器,它继承于JProgressBar并实现TableCellRenderer,表示这个类是一个进度条,同是也是一个列表的渲染器。
 */
public class DownloadProgressBar extends JProgressBar implements
		TableCellRenderer {
	public DownloadProgressBar() {
		super(0, 100);
		this.setStringPainted(true);
		this.setForeground(Color.green);
		// TODO Auto-generated constructor stub
	}

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		// TODO Auto-generated method stub
		Float floatValue=Float.parseFloat(value.toString());
		int intValue=(int)floatValue.floatValue();
		this.setValue(intValue);
		this.setString(value.toString()+"%");
		return this;
	}

}


其他列的渲染器:

/*
 * 其他列(除开进度条)的渲染器
 */
@SuppressWarnings("serial")
public class DownloadTableCellRenderer extends DefaultTableCellRenderer {
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		// 判断是否需要显示图片
		if (value instanceof Icon)
			this.setIcon((Icon) value);
		else
			this.setText(value.toString());
		// 判断是否选中
		if (isSelected)
			super.setBackground(table.getSelectionBackground());
		else
			setBackground(table.getBackground());
		// 设置居中
		this.setHorizontalAlignment(JLabel.CENTER);
		this.setToolTipText(value.toString());
		return this;
	}

}

设置好每一列的渲染器之后,我们就可以来根据每一列指定相应的渲染器:

//设置列宽
		this.getColumn(DownloadTableModel.ID_COLUMN).setMinWidth(0);
		this.getColumn(DownloadTableModel.ID_COLUMN).setMaxWidth(0);
		this.getColumn(DownloadTableModel.STATE_COLUMN).setMaxWidth(40);
		this.getColumn(DownloadTableModel.FILE_NAME_COLUMN).setMinWidth(200);
		this.getColumn(DownloadTableModel.FILE_SIZE_COLUMN).setMinWidth(60);
		this.getColumn(DownloadTableModel.PLAN_COLUMN).setMinWidth(180);
		this.getColumn(DownloadTableModel.SPEED_COLUMN).setMinWidth(50);
		this.getColumn(DownloadTableModel.HAS_DOWN_COLUMN).setMinWidth(50);
		this.getColumn(DownloadTableModel.COST_TIME_COLUMN).setMinWidth(50);
		this.getColumn(DownloadTableModel.SPARE_TIME_COLUMN).setMinWidth(50);
		
		//设置单元格渲染
		this.getColumn(DownloadTableModel.STATE_COLUMN).setCellRenderer(
				new DownloadTableCellRenderer());
		this.getColumn(DownloadTableModel.FILE_NAME_COLUMN).setCellRenderer(
				new DownloadTableCellRenderer());
		this.getColumn(DownloadTableModel.FILE_SIZE_COLUMN).setCellRenderer(
				new DownloadTableCellRenderer());
		this.getColumn(DownloadTableModel.PLAN_COLUMN).setCellRenderer(
				new DownloadProgressBar());
		this.getColumn(DownloadTableModel.SPEED_COLUMN).setCellRenderer(
				new DownloadTableCellRenderer());
		this.getColumn(DownloadTableModel.HAS_DOWN_COLUMN).setCellRenderer(
				new DownloadTableCellRenderer());
		this.getColumn(DownloadTableModel.COST_TIME_COLUMN).setCellRenderer(
				new DownloadTableCellRenderer());
		this.getColumn(DownloadTableModel.SPARE_TIME_COLUMN).setCellRenderer(
				new DownloadTableCellRenderer());
		//去掉表格的线
		setShowVerticalLines(false);



在下载的过程中,许多的数据都是不停的变化的,所以我们可以设计一个类来负责处理数据:

 

/*
 * 许多的数据都是在不停的变化的,因此提供TableModel来负责处理列表中的数据。
 */
public class DownloadTableModel extends DefaultTableModel {

	//定义每一列的名称
	public final static String ID_COLUMN = "id";
	public final static String STATE_COLUMN = "状态";
	public final static String FILE_NAME_COLUMN = "文件名称";
	public final static String FILE_SIZE_COLUMN = "文件大小";
	public final static String PLAN_COLUMN = "进度";
	public final static String SPEED_COLUMN = "下载速度";
	public final static String HAS_DOWN_COLUMN = "已下载";
	public final static String COST_TIME_COLUMN = "已用时间";
	public final static String SPARE_TIME_COLUMN = "剩余时间";

	public DownloadTableModel() {
		// TODO Auto-generated constructor stub
		super();
	}
	
	
	//定义一个columnNamespace数组根据列名操作每一列。
	private static final String[] columnNames = {
        ID_COLUMN,
		STATE_COLUMN,
		FILE_NAME_COLUMN,
		FILE_SIZE_COLUMN,
		PLAN_COLUMN,
		SPEED_COLUMN,
		HAS_DOWN_COLUMN,
		COST_TIME_COLUMN,
		SPARE_TIME_COLUMN
	};
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return columnNames.length;
	}

	@Override
	public String getColumnName(int col) {
		// TODO Auto-generated method stub
		return columnNames[col];
	}

	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Object getValueAt(int row, int column) {
		// TODO Auto-generated method stub
		String columnName = this.getColumnName(column);
		// 对列名进行判断,再返回相应的数据
		return super.getValueAt(row, column);
	}

}


一下是主界面中创建Jtable的方法:

/**
	 * 创建资源列表,主下载界面 通过swing测试发现创建table的方法
	 * 
	 * @author Administrator
	 */
	private void createTable() {
		// TODO Auto-generated method stub
		DownloadTableModel tableModel = new DownloadTableModel();
		this.downloadTable = new DownloadTable();
		this.downloadTable.setModel(tableModel);
		this.downloadTable.setTableFace();
	}


不知大家是否明白?我自己都有点晕了,往下就是JTOOLBar和JList的实现,由于这两个比JTable和Jtree都简单,这里不再做介绍,

等完成后面的功能之后还会继续更新!!!!

 

 

Java之多线程下载工具类

1、多线程下载工具类import java.net.URL; import java.io.InputStream; import java.io.RandomAccessFile; import j...
  • a_1054280044
  • a_1054280044
  • 2017年03月15日 21:05
  • 599

Ubuntu下非常给力的下载工具

Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源、为己所用,而不是仅仅从原始地址这单一资源处下载。 Ubuntu下也有类似的工具,那就是aira2。 aira2是一个命令...
  • luojiming1990
  • luojiming1990
  • 2013年06月12日 10:54
  • 66622

仿迅雷实现下载工具,支持断点续传和多线程下载以及简单界面展示

这篇博客介绍一下在公司实习时选做的一个项目,虽然实习期间没有全部完成,但觉得这个项目做好的话挺有意思的,就在之后几天赶着完善了这个项目。这个项目是仿照迅雷,实现一个下载工具。 (开发平台: Ubun...
  • Chengzi_comm
  • Chengzi_comm
  • 2016年11月04日 18:58
  • 1919

ubuntu上三个类似迅雷的多线程下载工具

ubuntu上三个类似迅雷的多线程下载工具 MultiGET 同济大学的Linux高手做的MultiGet,具有类似迅雷这样的多线程下载能力。 最新版本MultiGet为您提供更...
  • u010382560
  • u010382560
  • 2015年09月19日 12:05
  • 4722

Java 多线程下载技术实现

多线程下载多线程下载技术,简单的说就是把要下载的文件分成几块,由不同的线程来负责每一块数据的下载任务。技术要点 RandomAccessFile: Java中用来实现随机访问文件的类 http Ra...
  • FX_SKY
  • FX_SKY
  • 2016年01月07日 16:54
  • 1562

java文件下载工具类

/** * Desc:下载工具类 * @date 2014-6-26 */ public class DownLoadUtil { /** * Desc:根据文件头判断请求来自的浏览器,...
  • dly120219891208
  • dly120219891208
  • 2014年06月26日 11:27
  • 1595

实现HTTP断点续传下载工具(附源代码)

在前面的文章曾讨论了HTTP消息头的三个和断点继传有关的字段。一个是请求消息的字段Range,另两个是响应消息字段Accept-Ranges和Content-Range.其中Accept-Ranges...
  • u011625768
  • u011625768
  • 2015年01月28日 11:40
  • 1109

[Mac] mac linux 多线程下载利器 axel

​> 之前做过一些文件下载的统计,发现谷歌浏览器chrome和火狐firefox, 一般都是单线程的下载文件,360浏览器却是多线程的下载。 现在切换到了mac上,发现没有360哪个浏览器,就像找个...
  • lzz957748332
  • lzz957748332
  • 2015年07月10日 19:44
  • 5449

用Java实现FTP批量大文件上传下载(二)

2 上传下载 文件的上传可以分成多线程及单线程,在单线程情况下比较简单,而在多线程的情况下,要处理的事情要多点,同时也要小心很多。下面是net.sf.jftp.net.FtpConnection的上...
  • qq_36946260
  • qq_36946260
  • 2017年04月05日 11:58
  • 472

Java图片处理工具类

import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic...
  • sinat_29356635
  • sinat_29356635
  • 2016年09月06日 10:29
  • 310
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java多线程下载工具(二)
举报原因:
原因补充:

(最多只允许输入30个字)