package xy;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.util.*;
import java.net.*;
public class DownloadManager extends JFrame implements Observer{
private JTextField tf;
private DownloadTableModel tableModel;
private JTable table;
private JPanel pl,pl2,pl3;
private JButton addButton,pauseButton,resumeButton,cancelButton,clearButton,exitButton;
private Download load;
private boolean clear;
private JMenuBar jb;
private JMenu menu,menu1;
private JMenuItem item,item1,item2,item3,item4,item5;
public DownloadManager(){
this.setTitle("用户下载器");
this.setSize(800,300);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
actionExit();
}
});
pl=new JPanel();
jb=new JMenuBar();
menu=new JMenu("文件");
item=new JMenuItem("另存为...");
item.setToolTipText("该菜单项可以使下载的文件保存到自己指定的目录下");
item.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new Save();
}
});
item1=new JMenuItem("退出");
item1.setToolTipText("该界面将退出");
item1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionExit();
}
});
menu.add(item);
menu.add(item1);
jb.add(menu);
pl.add(jb);
menu1=new JMenu("编辑");
item2=new JMenuItem("清除");
item2.setToolTipText("该任务将被删除");
item2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionClear();
}
});
item3=new JMenuItem("取消");
item3.setToolTipText("该任务将被取消");
item3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionCancel();
}
});
item4=new JMenuItem("暂停");
item4.setToolTipText("该任务将被暂停");
item4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionPause();
}
});
item5=new JMenuItem("继续");
item5.setToolTipText("该任务将再次继续");
item5.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionResume();
}
});
menu1.add(item4);
menu1.add(item5);
menu1.add(item2);
menu1.add(item3);
jb.add(menu1);
pl.add(jb);
tf=new JTextField(30);
pl.add(tf);
addButton=new JButton("请先添加URL地址,然后开始下载");
addButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionAdd();
}
});
pl.add(addButton);
tableModel=new DownloadTableModel();
table=new JTable(tableModel);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
tablechanged();
}
});
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ProgressRenderer renderer=new ProgressRenderer(0,100);
renderer.setStringPainted(true);
table.setDefaultRenderer(JProgressBar.class,renderer);
table.setRowHeight((int)renderer.getPreferredSize().getHeight());
pl2=new JPanel();
pl2.setBorder(BorderFactory.createTitledBorder("任务如下:"));
pl2.setLayout(new BorderLayout());
pl2.add(new JScrollPane(table),BorderLayout.CENTER);
pl3=new JPanel();
pauseButton=new JButton("暂停(P)");
pauseButton.setMnemonic('P');
pauseButton.setToolTipText("任务将暂停...");
pauseButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionPause();
}
}
);
pauseButton.setEnabled(false);
pl3.add(pauseButton);
resumeButton=new JButton("继续(R)");
resumeButton.setMnemonic('R');
resumeButton.setToolTipText("任务将继续...");
resumeButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionResume();
}
}
);
resumeButton.setEnabled(false);
pl3.add(resumeButton);
cancelButton=new JButton("取消(C)");
cancelButton.setMnemonic('C');
cancelButton.setToolTipText("任务将取消...");
cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionCancel();
}
}
);
cancelButton.setEnabled(false);
pl3.add(cancelButton);
clearButton=new JButton("清除(Z)");
clearButton.setMnemonic('Z');
clearButton.setToolTipText("任务将清除...");
clearButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionClear();
}
}
);
clearButton.setEnabled(false);
pl3.add(clearButton);
exitButton=new JButton("退出(E)");
exitButton.setMnemonic('E');
exitButton.setToolTipText("将退出下载界面...");
exitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
actionExit();
}
}
);
exitButton.setEnabled(true);
pl3.add(exitButton);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(pl,BorderLayout.NORTH);
this.getContentPane().add(pl2,BorderLayout.CENTER);
this.getContentPane().add(pl3,BorderLayout.SOUTH);
}
public static void actionExit(){
System.exit(0);
}
private void actionAdd(){
URL url=showurl(tf.getText());
if(url!=null){
tableModel.addDownload(new Download(url));
tf.setText("");
}
else{
JOptionPane.showMessageDialog(this,"Invalid Download URL","Error",JOptionPane.ERROR_MESSAGE);
}
}
private URL showurl(String url) {
if (!url.toLowerCase().startsWith("http://")){
return null;
}
URL showurl=null;
try{
showurl=new URL(url);
}
catch (Exception e){
return null;
}
if (showurl.getFile().length()<2){
return null;
}
return showurl;
}
private void tablechanged(){
if (load!=null){
load.deleteObserver(DownloadManager.this);
}
if (!clear){