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多线程下载工具(四)

4、悬浮窗体的实现: 效果图 代码: 首先在main窗体中定义一个悬浮窗体变量,并实力化 private SuspendWindow suspendWindow; this.suspen...
  • lhfight
  • lhfight
  • 2012年04月05日 15:35
  • 528

Java之多线程下载工具类

1、多线程下载工具类import java.net.URL; import java.io.InputStream; import java.io.RandomAccessFile; import j...

java多线程下载工具(一)

1、  主界面的搭建 效果图: 分析:界面的工具栏是一个JToolBar,导航栏是一个JTree、资源列表为JTable、资源信息列表为JList。注意:这些都不是简单的拖控件式是现代的而...
  • lhfight
  • lhfight
  • 2012年03月29日 17:07
  • 1072

java多线程下载工具(三)

3、JToolBar和JList的实现: 这两个的实现都相对与JTable的实现来说都比较简单,这里直接贴码。 JToolBar: private void createBar() { /...
  • lhfight
  • lhfight
  • 2012年03月30日 11:06
  • 902

java实例_多线程下载工具

  • 2011年02月13日 14:46
  • 531KB
  • 下载

多线程下载工具 MultiGet

转自开源社区http://www.oschina.net/p/multiget MultiGet 是一个非常容易使用的图形界面多线程下载工具。它支持基本的 http/ftp协议,支持断点续传,动...

多线程断点下载工具

多线程断点下载工具需要完成以下几个功能: * 1.通过提供的网络文件地址,下载該文件 * 2.要求使用多个线程同时下载,并且实时更新下载进度(0%~100%) * 3.要求能够实现断点功能(扩展) ...
  • MrwanZH
  • MrwanZH
  • 2017年07月24日 08:56
  • 166

Linux多线程下载工具axel

  • 2009年11月03日 15:45
  • 50KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java多线程下载工具(二)
举报原因:
原因补充:

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