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

📄 main.java

📁 该多线程下载工具功能强大
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package coursedesign;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FilenameFilter;
import java.net.URL;
import java.util.*;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.*;
import javax.swing.table.*;

//定义类Main类并实现Observer方法
public class Main extends JFrame implements Observer {

	// 创建标签

	private Label L1;

	private Label L2;

	private Label L3;

	private Label L4;

	// 用类Table定义了一个tableModel
	private Table tableModel;

	// 创建一个边框

	private Border border1;

	// 创建了一个表
	private JTable table;

	// 创建按钮
	private JButton pauseButton, resumeButton;

	private JButton clearButton, newButton;

	private JButton delete;

	// 用类Download定义了一个selectedDownload
	private DownLoadFile selectedDownload;

	// 定义了一个boolean形的clearing
	private boolean clearing;

	// 定义线程数
	private int nTread = 5;

	// 文件名变量(有扩展名)
	private String filename;

	// 文件名变量(无扩展名)
	private String fileName;

	private DownLoadFrame df;

	// 创建一个数组变量用于保存各文件储存路径
	Vector pathname = new Vector();

	// 已下载总量
	private int downloaded = 0;

	// 下载文件大小
	private int size = -1;

	// 下载状态
	private int status = 0;

	// 各个线程下载量
	private int a[];

	// 下载所用时间
	private int second = 0;

	// 网络地址
	private String verifiedUrl;

	// 文件保存路径
	private String saveURL;

	OperateProperties op;

	public Main() {
		super("迅雷(山寨版)");
		// 实例化
		op = new OperateProperties();
		df = new DownLoadFrame();
		border1 = BorderFactory.createEmptyBorder(10, 0, 10, 0);
		L1 = new Label(
				"                                                                                    ");
		L2 = new Label("  ");
		L3 = new Label("  ");
		L4 = new Label("  ");

		// 定义容器
		JPanel p1 = new JPanel();
		p1.setLayout(new BorderLayout());
		JPanel addPanel = new JPanel();
		JPanel buttonsPanel = new JPanel();

		// 初始化UI大小
		setSize(500, 250);
		setLocation(256, 280);
		setResizable(false);
		buttonsPanel.add(L1);

		/*
		 * 
		 * @实例化各个组件及对各个组件进行方法监听、实现
		 * 
		 */

		// 实现暂停功能
		pauseButton = new JButton("暂停");
		// 加载按钮监听事件
		pauseButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 调用暂停方法
				actionPause();
			}
		});
		// 设置暂停按钮的初使状态为FALSE
		pauseButton.setEnabled(false);
		buttonsPanel.add(pauseButton);

		// 实现开始下载
		// 加载按钮监听事件
		df.b2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				df.setVisible(false);
				// 调用下载方法
				String path = df.t2.getText();
				filename = df.t3.getText();
				verifiedUrl = df.t1.getText();
				saveURL = path + "\\" + filename;
				pathname.add(saveURL);
				
				// 对各个属性重新初始化
				downloaded=0;
				status=0;
				a=null;
				second=0;

				
				actionAdd();
			}
		});
		// 设置开始下载按钮的初使状态为FALSE
		df.b2.setEnabled(false);

		// 实现线程数的选择
		df.jb.addActionListener(new ActionListener() {
			// 加载按钮监听事件
			public void actionPerformed(ActionEvent e) {
				String item = df.jb.getSelectedItem().toString();
				nTread = Integer.parseInt(item);
			}
		});

		// 初始化
		tableModel = new Table();
		// 创建一个表,构造 JTable,使用tableModel作为数据模型、默认的列模型和默认的选择模型对其进行初始化。
		table = new JTable(tableModel);
		table.setShowHorizontalLines(false);// 是否显示水平的网格线

		table.setShowVerticalLines(false);// 是否显示垂直的网格线
		table.setSelectionBackground(Color.green);// 设置所选择行的背景色

		table.setSelectionForeground(Color.BLACK);// 设置所选择行的前景色

		table.setGridColor(Color.white);// 设置网格线的颜色

		// addListSelectionListener将侦听器添加到每次在选择发生更改时都得到通知的列表。
		table.getSelectionModel().addListSelectionListener(
				new ListSelectionListener() {
					// valueChanged行选择更改时调用,重新绘制来显示新的选择
					public void valueChanged(ListSelectionEvent e) {
						// 调用tableSelectionChanged方法
						tableSelectionChanged();
					}
				});
		table.addMouseListener(new MouseAdapter() {

			public void mouseClicked(MouseEvent e) {

				if (e.getClickCount() == 2) {

					if (selectedDownload.getStatus() == 0)
						actionPause();
					else if (selectedDownload.getStatus() == 1)
						actionResume();
				}
			}
		});
		// SINGLE_SELECTION一次选择一个列表索引
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		// 实例化进度条的类,并设置进度条的最小\最大值
		Progress renderer = new Progress(0, 100);
		// setStringPainted默认显示有界区间整数值的组件。进度条通常通过显示某个操作的完成百分比,
		// 可能是此百分比的一个文本显示来传达其进度。
		renderer.setStringPainted(true);
		table.setDefaultRenderer(JProgressBar.class, renderer);

		// 设置表格的行高
		table.setRowHeight(22);
		// 设置水平滚动条
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		// 设置列位置为不可移动
		table.getTableHeader().setReorderingAllowed(false);

		// 设置列的宽度
		table.getColumnModel().getColumn(0).setMinWidth(90);
		table.getColumnModel().getColumn(1).setMinWidth(130);
		table.getColumnModel().getColumn(8).setMinWidth(130);
		
		// 设置表中数据居中显示
		DefaultTableCellRenderer r = new DefaultTableCellRenderer();
		r.setHorizontalAlignment(JLabel.CENTER);
		table.setDefaultRenderer(Object.class, r);
		// 定义一个下载容器
		JPanel downloadsPanel = new JPanel();
		downloadsPanel.setLayout(new BorderLayout());
		downloadsPanel.add(new JScrollPane(table), BorderLayout.CENTER);

		buttonsPanel.add(L2);
		// 实现继续下载
		resumeButton = new JButton("开始");
		// 为继续下载按钮设置监听事件,
		resumeButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 调用恢复下载的方法
				actionResume();
			}
		});
		// 初始状态为FALSE
		resumeButton.setEnabled(false);

		buttonsPanel.add(resumeButton);
		// 实现任务的添加
		newButton = new JButton("新建任务");
		// 为新建任务按钮设置监听事件
		newButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 下载任务框设置为可见
				df.setVisible(true);

			}
		});
		newButton.setEnabled(true);

		// 设置清除按钮的监听事件,并调用相应的方法
		clearButton = new JButton("删除任务");
		clearButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				actionClear();

			}
		});
		clearButton.setEnabled(false);

		// 设设置删除文件按钮的监听事件,并调用相应的方法
		delete = new JButton("删除文件");
		delete.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				final SureFrame sf = new SureFrame();
				sf.sure.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						actionDelete();
						actionClear();
						sf.dispose();
					}
				});
				sf.cancel.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {

						sf.dispose();
					}
				});
			}
		});
		delete.setEnabled(false);

		// 对下载任务的文件框进行监听
		df.t1.addMouseListener(new MouseListener() {
			public void mouseReleased(MouseEvent e) {

			}

			public void mousePressed(MouseEvent e) {

			}

			// 当鼠标移出时,如果文本框为空,则让删除按钮不可用
			public void mouseExited(MouseEvent e) {
				if (df.t1.getText().equals("") || df.t2.getText().equals("")) {

⌨️ 快捷键说明

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