📄 mainframe.java
字号:
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import download.*;
import gui.*;
import java.util.ArrayList;
public class MainFrame extends JFrame
{
private DefaultListModel model;
private JList lst_downfiles;
private ItemPane itp_fileProperity;
private ToolPane toolpane;
private int lst_pos = -1;
public MainFrame()
{
super("多线程下载工具");
ini();
setGUI();
setEvent();
Displace dis = new Displace();
dis.setDaemon(true);
dis.setPriority(7);
dis.start();
}
/**
* 功能:加载序列化文件
*/
private void ini()
{
File myDownfiles = new File(".\\downfiles.data");
if (myDownfiles.exists())
{
ObjectInputStream ois = null;
try
{
ois = new ObjectInputStream(new FileInputStream(myDownfiles));
model = (DefaultListModel) (ois.readObject());
ois.close();
DownLoadInfo tmp_info;
int len = model.getSize();
for (int i = 0; i < len; i++)
{
tmp_info = (DownLoadInfo) (model.getElementAt(i));
if (!tmp_info.isFinished())
{
MultiDownLoad md = new MultiDownLoad(tmp_info);
md.MultiDown();
}
}
lst_pos = len - 1;
}
catch (Exception e)
{
try
{
ois.close();
}
catch (Exception e1)
{
}
JOptionPane.showMessageDialog(this, "加载历史下载文件出错!");
return;
}
}
else
{
model = new DefaultListModel();
}
}
/**
* 功能:保存序列化文件
*/
private void saveModel()
{
ObjectOutputStream oos = null;
try
{
oos = new ObjectOutputStream(new FileOutputStream(
".\\downfiles.data"));
oos.writeObject(model);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "系统关闭时出错,可能丢失部分下载信息!");
}
finally
{
try
{
oos.close();
}
catch (Exception e2)
{
}
}
}
public void setGUI()
{
// 构建List列表布局
lst_downfiles = new JList(model);
lst_downfiles.setBorder(BorderFactory.createEtchedBorder());
JScrollPane sp_lst = new JScrollPane(lst_downfiles);
sp_lst.setPreferredSize(new Dimension(200, 360));
// 创建文件下载属性面板
itp_fileProperity = new ItemPane();
itp_fileProperity.setPreferredSize(new Dimension(400, 360));
// 构建窗口上方布局
JPanel top_pane = new JPanel();
top_pane.setLayout(new BorderLayout());
top_pane.add(sp_lst, BorderLayout.WEST);
top_pane.add(itp_fileProperity, BorderLayout.CENTER);
top_pane.setBorder(BorderFactory.createEtchedBorder());
// 创建toolbar面板
toolpane = new ToolPane();
// 构建Frame布局
this.setLayout(new BorderLayout());
this.getContentPane().add(top_pane, BorderLayout.CENTER);
this.getContentPane().add(toolpane, BorderLayout.SOUTH);
// 设置Frame显示属性
this.setSize(600, 400);
this.setLocation(200, 200);
this.setVisible(true);
this.setResizable(false);
}
public void setEvent()
{
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.toolpane.btnTask.addActionListener(new AddTaskListener(this));
this.toolpane.btnClose.addActionListener(new CloseListener());
this.lst_downfiles.addListSelectionListener(new SelectTaskListener());
this.addWindowListener(new JFrameCloseListener());
}
public static void main(String[] args)
{
new MainFrame();
}
// 事件监听器程序
// 添加下载任务监听器类
class AddTaskListener implements ActionListener
{
MainFrame f;
public AddTaskListener(MainFrame f)
{
this.f = f;
}
public void actionPerformed(ActionEvent e)
{
// 调用添加任务对话框
TaskDialog taskInfo = new TaskDialog(f);
// 创建下载任务
if (taskInfo.getBtn())
{
addTask(taskInfo);
}
}
}
// 点击关闭按钮监听器类
class CloseListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
saveModel();
System.exit(0);
}
}
// 点击JFrame关闭窗口监听器类
class JFrameCloseListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
saveModel();
System.exit(0);
}
}
// 列表框选择内容改变监听器
class SelectTaskListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
int index = lst_downfiles.getSelectedIndex();
setFileProperity(index);
lst_pos = index;
}
}
// 设置下载文件属性
private void setFileProperity(int index)
{
DownLoadInfo tmp_info = (DownLoadInfo) (model.elementAt(index));
String tmp_file = tmp_info.getSaveFileName();
float tmp_len = tmp_info.getFileLength();
itp_fileProperity.lab_filename.setText(tmp_file.substring(tmp_file
.lastIndexOf("\\") + 1));
if (tmp_len < 500)
{
itp_fileProperity.lab_filesize.setText(tmp_len + "bytes");
}
else if (tmp_len < 1024 * 1024)
{
tmp_len = Math.round(tmp_len / 1024 * 100) / 100.0f;
itp_fileProperity.lab_filesize.setText(tmp_len + "k");
}
else
{
tmp_len = Math.round(tmp_len / 1024 / 1024 * 100) / 100.0f;
itp_fileProperity.lab_filesize.setText(tmp_len + "M");
}
itp_fileProperity.pbar_model.setValue(tmp_info.getDownProgress());
itp_fileProperity.pbar.setString("下载进度"
+ itp_fileProperity.pbar.getValue() + "%");
tmp_len = tmp_info.getDownSpeed();
itp_fileProperity.lab_downspeed.setText(tmp_len + "k/s");
itp_fileProperity.lab_threadnum.setText(tmp_info.getThreadNum() + "");
String tmp_str = tmp_file;
if (tmp_file.length() > 20)
{
tmp_str = tmp_file.substring(0, 19) + "...";
}
itp_fileProperity.lab_filepath.setText(tmp_str);
itp_fileProperity.lab_filepath.setToolTipText(tmp_file);
if (tmp_info.getDownURL().length() > 20)
{
tmp_str = tmp_info.getDownURL().substring(0, 19) + "...";
}
itp_fileProperity.lab_url.setText(tmp_str);
itp_fileProperity.lab_url.setToolTipText(tmp_info.getDownURL());
if (tmp_info.isFinished())
{
itp_fileProperity.lab_filestate.setText("下载完成");
}
else if (tmp_info.isError())
{
itp_fileProperity.lab_filestate.setText("下载错误");
}
else
{
itp_fileProperity.lab_filestate.setText("正在下载中...");
}
}
/**
* 功能:创建一个下载任务 返回值:无
*/
private void addTask(TaskDialog taskInfo)
{
DownLoadInfo tmp_info = new DownLoadInfo(taskInfo.getUrlStr(), taskInfo
.getFileStr(), 3);
if (!tmp_info.getIsValidate())
{
JOptionPane.showMessageDialog(this, "文件无法下载!");
return;
}
MultiDownLoad md = new MultiDownLoad(tmp_info);
md.MultiDown();
model.addElement(tmp_info);
int index = model.getSize() - 1;
setFileProperity(index);
lst_pos = index;
}
class Displace extends Thread
{
public void run()
{
while (true)
{
if (lst_pos != -1)
{
setFileProperity(lst_pos);
}
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -