⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 table.java

📁 该多线程下载工具功能强大
💻 JAVA
字号:
package coursedesign;

import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

//用来管理表内数据
public class Table extends AbstractTableModel implements Observer {
	// 建立一个数组columnNames用表每行每列的名字

	int i = 0;

	private static final String[] columnNames = { "任务", "进度", "速率", "文件大小",
			"下载状态", "线程", "剩余时间", "用时","文件类型" };

	// 建立一个数组columnClasses用来存放表内所放数据的类型
	private static final Class[] columnClasses = { String.class,
			JProgressBar.class, String.class, String.class, String.class,
			String.class, String.class, String.class , String.class };

	// 创建一个长度可伸缩的数组用来存放table 的下载列表
	private ArrayList<DownLoadFile> downloadList = new ArrayList<DownLoadFile>();

	public void addDownload(DownLoadFile download) {
		// 设置table为download改变事件的接收容器Oberser
		download.addObserver(this);

		// 将文件的下载列表加入到download容器
		downloadList.add(download);

		// 通知table表格发生了变化,通知所有侦听器,已插入范围的行。
		fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
	}

	// 创建了一个返回值为Download的方法,返回列表上对应的下载地址
	public DownLoadFile getDownload(int row) {
		if (row == -1)
			row = 0;
		return (DownLoadFile) downloadList.get(row);
	}

	// 清除表中列表上对应项
	public void clearDownload(int row) {
		downloadList.remove(row);
		// 通知所有侦听器,已删除范围在 [Row,Row](包括)的行。
		fireTableRowsDeleted(row, row);
	}

	// 返回列模型中的列数
	public int getColumnCount() {
		return columnNames.length;
	}

	// 返回列名称。
	public String getColumnName(int col) {
		return columnNames[col];
	}

	// 定义一个getRowCount方法,返回此表模型中的行数。
	public int getRowCount() {
		// 返回下载列表中的大小
		return downloadList.size();
	}

	// 返回表中数据类型
	public Class getColumnClass(int col) {
		return columnClasses[col];
	}

	// 返回 行 和 列 位置的单元格值。
	public Object getValueAt(int row, int col) {
		// 创建一个对象,强制转换下载列表上的行来获取URL地址
		DownLoadFile download = (DownLoadFile) downloadList.get(row);
		// 按顺序获取相应的内容

		switch (col) {

		// 显示文件名
		case 0:

			return download.getFileName();

		case 1:

			// 显示当前下载进度
			return new Float(download.getProgress());

			// 显示当前下载速度
		case 2:
			float f = new Float(download.getSpeed() / 1024.0);

			f = (float) Math.round(f * 100) / 100;

			return f + " KB/S";

			// 显示下载文件的大小
		case 3:
			float size = new Float(download.getSize() / 1024 / 1024.0);
			size = (float) Math.round(size * 100) / 100;
			// 如果文件大小不为空则返回文件大小
			return (size == -1) ? "" : size + " MB";

			// 显示当前状态
		case 4:

			return DownLoadFile.STATUSES[download.getStatus()];

			// 显示下载线程数
		case 5:
			return download.getThread();

			// 显示剩余时间
		case 6:
			return download.getLeaveTime();

			// 显示下载所用时间
		case 7:
			return download.getTime();
		case 8:
			return download.getFileType();
		}

		// 如果都不符合则返回空
		return "";
	}

	// 创建一个方法,用来监视downloadList,一旦改变马上调用此方法
	public void update(Observable o, Object arg) {
		int index = downloadList.indexOf(o);

		// 通知table 那行数据需要更新了
		fireTableRowsUpdated(index, index);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -