⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadmanager.java

📁 HTTP单线程下载实例
💻 JAVA
字号:
import java.awt.*;   
import java.awt.event.*;   
import java.net.*;   
import java.util.*;   
import javax.swing.*;   
import javax.swing.event.*; 

public class DownloadManager extends JFrame implements Observer{ 
	private JTextField addTextField;
	private DownloadsTableModel tableModel;   //table列表模型
	private JTable table;   //table列表
	
	private JButton pauseButton, resumeButton;   
	private JButton cancelButton, clearButton;
	private Download selectedDownload;  
	private boolean clearing; //列表flag  
	
	public DownloadManager() {   
		setTitle("超级迅雷");       
		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);   

		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.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);
		
		setSize(640,480);
		setVisible(true);   
	}
	
	private void actionExit() {   
	  	System.exit(0);   
	}   
    
	//   Add   a   new   download.   
	private  void  actionAdd() {   
		URL verifiedUrl = verifyUrl(addTextField.getText());   
		if (verifiedUrl != null) {   
		  tableModel.addDownload(new Download(verifiedUrl));   
		  addTextField.setText(""); 
		}else{
			JOptionPane.showMessageDialog(this,"无效的下载地址", "错误", JOptionPane.ERROR_MESSAGE);   
		}   
	}
	
	private URL verifyUrl(String url) {
		if   (!url.toLowerCase().startsWith("http://")) //只允许HTTP下载
			return   null;
		URL verifiedUrl = null;
		try {
			verifiedUrl = new URL(url);
		}catch(Exception e){   
              return null;   
        }
        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);   
			}   
		}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();   
	}   
	
	public static void main(String[] args) {   
		DownloadManager manager = new DownloadManager();     
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -