📄 main.java
字号:
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 + -