?? downloadmanager.java
字號:
import java.util.Observer;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
/*
* 創建日期 2005-4-6
*
* TODO
*/
/**
* @author Administrator
*
* TODO 下載管理器管理類
* 負責界面的顯示
*/
class DownloadManager extends JFrame implements Observer {
//下載文件URL文本框
private JTextField addTextField;
//下載列表數據模型
private DownloadsTableModel tableModel;
//下載任務列表
private JTable table;
//控制選中的下載任務
private JButton pauseButton,resumeButton;
private JButton cancelButton,clearButton;
//當前選中的下載任務
private Download selectedDownload;
//標簽:指示表格選擇是否被清除
private boolean clearing;
//構造函數
public DownloadManager(){
//設置程序標題
setTitle("網絡下載管理器");
//設置窗體大小
setSize(640,480);
setLocation(200,50);
//處理關閉事件
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
actionExit();
}
});
//設置文件菜單項
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
//快捷鍵
fileMenu.setMnemonic(KeyEvent.VK_F);
JMenuItem fileExitMenuItem = new JMenuItem("退出",KeyEvent.VK_X);
fileExitMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionExit();
}
});
fileMenu.add(fileExitMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
//設置URL添加面板
JPanel addPanel = new JPanel();
addTextField = new JTextField(30);
addPanel.add(addTextField);
JButton addButton = new JButton("添加下載");
addButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionAdd();
}
});
addPanel.add(addButton);
//設置下載列表
tableModel = new DownloadsTableModel();
table = new JTable(tableModel);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
tableSelectionChanged();
}
});
//只能同時選中一行
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());
//設置下載表面板
JPanel downloadsPanel = new JPanel();
downloadsPanel.setBorder(BorderFactory.createTitledBorder("下載列表"));
downloadsPanel.setLayout(new BorderLayout());
downloadsPanel.add(new JScrollPane(table),BorderLayout.CENTER);
//設置按鈕面板
JPanel buttonsPanel = new JPanel();
pauseButton = new JButton("暫停");
pauseButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionPause();
}
});
pauseButton.setEnabled(false);
buttonsPanel.add(pauseButton);
//*******************************************************
resumeButton = new JButton("恢復");
resumeButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionResume();
}
});
resumeButton.setEnabled(false);
buttonsPanel.add(resumeButton);
//********************************************************
cancelButton = new JButton("取消");
cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionCancel();
}
});
cancelButton.setEnabled(false);
buttonsPanel.add(cancelButton);
//*******************************************************
clearButton = new JButton("清除");
clearButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionClear();
}
});
clearButton.setEnabled(false);
buttonsPanel.add(clearButton);
//*****************************************************
getContentPane().setLayout(new BorderLayout());
getContentPane().add(addPanel,BorderLayout.NORTH);
getContentPane().add(downloadsPanel,BorderLayout.CENTER);
getContentPane().add(buttonsPanel,BorderLayout.SOUTH);
}
//退出程序
private void actionExit(){
System.exit(0);
}
//添加一個新下載
private void actionAdd(){
URL verifiedUrl = verifyUrl(addTextField.getText());
if(verifiedUrl != null){
tableModel.addDownload(new Download(verifiedUrl));
addTextField.setText("");
}
else{
JOptionPane.showMessageDialog(this,"URL地址無效!","錯誤",JOptionPane.ERROR_MESSAGE);
}
}
//檢查URL地址
private URL verifyUrl(String url){
//只充許HTTP URLs
if(!url.toLowerCase().startsWith("http://"))
return null;
//格式化URL
URL verifiedUrl = null;
try{
verifiedUrl = new URL(url);
}
catch(Exception e){
return null;
}
//確認URL連接到一個文件
if(verifiedUrl.getFile().length()< 2)
return null;
return verifiedUrl;
}
//當表格選擇變化時調用
private void tableSelectionChanged(){
//解除原先選定的下載事件的注冊
if(selectedDownload != null){
selectedDownload.deleteObserver(DownloadManager.this);
}
//如果沒清除的話,注冊下載事件
if(!clearing){
selectedDownload = tableModel.getDownload(table.getSelectedRow());
selectedDownload.addObserver(DownloadManager.this);
updateButtons();
}
}
//暫停下載
private void actionPause(){
selectedDownload.pause();
updateButtons();
}
//重啟下載
private void actionResume(){
selectedDownload.resume();
updateButtons();
}
//取消下載
private void actionCancel(){
selectedDownload.cancel();
updateButtons();
}
//清除下載
private void actionClear(){
clearing = true;
tableModel.clearDownload(table.getSelectedRow());
clearing = false;
selectedDownload = null;
updateButtons();
}
//當狀態改變時改變按鈕的可用狀態
private void updateButtons(){
if(selectedDownload != null){
int status = selectedDownload.getStatus();
switch(status){
case Download.DOWNLOADING:
pauseButton.setEnabled(true);
resumeButton.setEnabled(false);
cancelButton.setEnabled(true);
clearButton.setEnabled(false);
break;
case Download.PAUSED:
pauseButton.setEnabled(false);
resumeButton.setEnabled(true);
cancelButton.setEnabled(true);
clearButton.setEnabled(false);
break;
case Download.ERROR:
pauseButton.setEnabled(false);
resumeButton.setEnabled(true);
cancelButton.setEnabled(false);
clearButton.setEnabled(true);
break;
default://完成或取消
pauseButton.setEnabled(false);
resumeButton.setEnabled(false);
cancelButton.setEnabled(false);
clearButton.setEnabled(true);
break;
}
}
else{
//沒有選擇下載
pauseButton.setEnabled(false);
resumeButton.setEnabled(false);
cancelButton.setEnabled(false);
clearButton.setEnabled(false);
}
}
//當下載任務改變時,通知這個方法
public void update(Observable o,Object arg){
//更新按鈕,如果選擇的下載改變了
if(selectedDownload != null && selectedDownload.equals(o))
updateButtons();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -