package downLoad;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class Play {
private static JButton begin = null; // 开始
private static JButton suspend = null;// 暂停
private static JButton continues = null;// 继续
private URL url = null;
private HttpURLConnection connection = null;
private static JFrame f = null;
private static DefaultTableModel dtm;
private static JTable table;
private static int number = 1;// 下载序号
private static List<Down> list = new ArrayList<>();
public static void main(String[] args) {
new Play().CreateGUI();
}
public void CreateGUI() {
f = new JFrame("下载器...");
Font font1 = new Font("楷体", Font.PLAIN, 20);
f.setResizable(true);
f.setResizable(false);
f.setBounds(700, 290, 600, 353);
f.setLayout(null);
// 下载地址框
JLabel urlAddress = new JLabel("请输入下载地址:");
JTextField urlAddresss = new JTextField("");
urlAddresss.setText("http://106.14.167.194/1.rar");
urlAddress.setBounds(20, 50, 180, 25);
urlAddresss.setBounds(170, 50, 300, 25);
// 存储地址
JLabel saveAddress = new JLabel("请输入存储地址:");
JTextField saveAddresss = new JTextField("");
saveAddresss.setText("E:\\下载练习/");
saveAddress.setBounds(20, 80, 180, 25);
saveAddresss.setBounds(170, 80, 300, 25);
// 开始下载按钮
begin = new JButton("开始下载");
begin.setBounds(470, 65, 120, 25);
// 暂停下载按钮
suspend = new JButton("暂停");
suspend.setBounds(200, 10, 80, 25);
// 继续下载按钮
continues = new JButton("继续");
continues.setBounds(300, 10, 80, 25);
// 表格面板
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 110, 580, 210);
f.add(scrollPane);
// 将表格框添加入滚动窗
table = new JTable();
// 设置表格默认模型
dtm = new DefaultTableModel(new Object[][] {}, new String[] { "序号", "下载地址", "存储地址", "下载进度", });
table.setModel(dtm);
table.setBounds(10, 10, 200, 200);
scrollPane.setPreferredSize(new Dimension(500, 400));
// 设置自动出现滚动条
scrollPane.setAutoscrolls(true);
scrollPane.setViewportView(table);
// 设置字体
urlAddress.setFont(font1);
urlAddresss.setFont(font1);
saveAddress.setFont(font1);
saveAddresss.setFont(font1);
begin.setFont(font1);
suspend.setFont(font1);
continues.setFont(font1);
// 添加组件
f.add(urlAddress);
f.add(urlAddresss);
f.add(saveAddress);
f.add(saveAddresss);
f.add(begin);
f.add(suspend);
f.add(continues);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
begin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String urltext = urlAddresss.getText();
String savetext = saveAddresss.getText();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUrlDownloadPath().equals(urltext)) {
JOptionPane.showMessageDialog(f, "你要下载的文件正在下载...");
urltext = null;
}
}
if (urltext != null) {
if (urltext.length() == 0) {
JOptionPane.showMessageDialog(f, "请输入下载地址...");
urltext = null;
}
//判断要下载的文件是否存在
try {
url = new URL(urltext);
// 创建url对象,以便获得文件流
connection = (HttpURLConnection) url.openConnection();
// 连接属性---Range指从服务器下载文件的字节数范围 0-表示不指定终止字节数
connection.setRequestProperty("Range", "bytes=0-");
connection.connect();
int responseCode=connection.getResponseCode();
if(responseCode/100!=2) {
JOptionPane.showMessageDialog(null,"下载失败,连接错误,请重试...");
urltext=null;
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (savetext != null) {
if (savetext.length() == 0) {
JOptionPane.showMessageDialog(f, "请输入文件的存储地址...");
savetext = null;
}
}
if (urltext != null && savetext != null) {
Down d = new Down(urltext, savetext);
String numbers = Integer.toString(number);
String progress = Integer.toString(d.getProgress());
dtm.addRow(new String[] { numbers, urltext, savetext, progress });
number++;
list.add(d);
Thread t1 = new Thread() {
public void run() {
while (true) {
for (int i = 0; i < list.size(); i++) {
String progress = Integer.toString(list.get(i).getProgress()) + "%";
if (list.get(i).getProgress() < 100) {
table.setValueAt(progress, i, 3);
} else {
table.setValueAt("下载完成", i, 3);
}
}
}
}
};
t1.start();
}
}
});
suspend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (table.getSelectedRow() == -1) {
JOptionPane.showMessageDialog(f, "用鼠标请选择您想要暂停下载的行");
} else {
// table.getSelectedRow() 获取挑选的行
list.get(table.getSelectedRow()).setPause(true);
JOptionPane.showMessageDialog(f, "第 "+(table.getSelectedRow() + 1) + " 行暂停下载");
}
}
});
continues.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (table.getSelectedRow() == -1) {
JOptionPane.showMessageDialog(f, "用鼠标请选择您想要继续下载的行");
} else {
// table.getSelectedRow() 获取挑选的行
list.get(table.getSelectedRow()).setPause(false);
JOptionPane.showMessageDialog(f,"第 "+(table.getSelectedRow() + 1) + " 行继续下载");
}
}
});
}
}