- 浏览: 137535 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
每天一首喜欢的歌:
这是用什么软件做的
java仿迅雷下载 -
ma546659141:
厉害
java仿迅雷下载 -
shreo_2007:
完美运行.很强大.很好的学习资源
java仿迅雷下载 -
盖世英雄_1988:
我去,楼主你为什么这么吊,太强大了。。支持楼主,顶顶顶顶。。。 ...
java仿迅雷下载 -
WLLT:
niu 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 ...
java仿迅雷下载
java仿迅雷下载
- 博客分类:
- swin收藏
package org.crazyit.flashget.ui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Insets; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTable; import javax.swing.JToolBar; import javax.swing.Timer; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import org.crazyit.flashget.ContextHolder; import org.crazyit.flashget.DownloadContext; import org.crazyit.flashget.info.Info; import org.crazyit.flashget.navigation.DownloadNode; import org.crazyit.flashget.navigation.DownloadingNode; import org.crazyit.flashget.navigation.FailNode; import org.crazyit.flashget.navigation.FinishNode; import org.crazyit.flashget.navigation.TaskNode; import org.crazyit.flashget.object.Resource; import org.crazyit.flashget.state.Downloading; import org.crazyit.flashget.state.Failed; import org.crazyit.flashget.state.Finished; import org.crazyit.flashget.state.Pause; import org.crazyit.flashget.util.DateUtil; import org.crazyit.flashget.util.FileUtil; import org.crazyit.flashget.util.ImageUtil; public class MainFrame extends JFrame { //导航树 private NavigationTree navTree; //下载列表 private DownloadTable downloadTable; //信息列表 private JList infoJList; //工具栏 private JToolBar toolBar = new JToolBar(); //新任务界面 private NewTaskFrame taskFrame; //所有任务节点 private TaskNode taskNode = new TaskNode(); //正在下载节点 private DownloadingNode downloadingNode = new DownloadingNode(); //下载失败节点 private FailNode failNode = new FailNode(); //下载完成节点 private FinishNode finishNode = new FinishNode(); //当前用户浏览的节点 private DownloadNode currentNode = taskNode; //信息列表的对象 private final static String FILE_SIZE_TEXT = "文件大小: "; private final static String FILE_PATH_TEXT = "文件路径: "; private final static String DOWNLOAD_DATE_TEXT = "下载时间: "; private final static String RESOURCE_INFO_TEXT = "资源信息: "; private List<Info> infoList = new ArrayList<Info>(); private Info fileSize = new Info(FILE_SIZE_TEXT); private Info filePath = new Info(FILE_PATH_TEXT); private Info downloadDate = new Info(DOWNLOAD_DATE_TEXT); private Info info = new Info(RESOURCE_INFO_TEXT); private Action newTask = new AbstractAction("新任务", new ImageIcon("images/tool/new-download.gif")) { public void actionPerformed(ActionEvent e) { newTask(); } }; private Action start = new AbstractAction("开始", new ImageIcon("images/tool/do-download.gif")) { public void actionPerformed(ActionEvent e) { start(); } }; private Action pause = new AbstractAction("暂停", new ImageIcon("images/tool/pause.gif")) { public void actionPerformed(ActionEvent e) { pause(); } }; private Action delete = new AbstractAction("删除任务", new ImageIcon("images/tool/delete.gif")) { public void actionPerformed(ActionEvent e) { delete(); } }; private Action deleteFinished = new AbstractAction("删除任务", new ImageIcon("images/tool/remove-finished.gif")) { public void actionPerformed(ActionEvent e) { deleteFinished(); } }; ActionListener refreshTable = new ActionListener() { public void actionPerformed(ActionEvent e) { //刷新列表 downloadTable.updateUI(); } }; //悬浮窗口 private SuspendWindow suspendWindow; //任务栏图标 private TrayIcon trayIcon; //任务栏图标菜单 private PopupMenu popupMenu = new PopupMenu(); private MenuItem openItem = new MenuItem("打开/关闭"); private MenuItem newItem = new MenuItem("新建下载任务"); private MenuItem startItem = new MenuItem("开始全部任务"); private MenuItem pauseItem = new MenuItem("暂停全部任务"); private MenuItem removeItem = new MenuItem("删除完成任务"); private MenuItem quitItem = new MenuItem("退出"); private BufferedImage trayIconImage = ImageUtil.getImage(ImageUtil.TRAY_ICON_PATH); public MainFrame() { //创建导航树 createTree(); createDownloadTable(); //创建信息列表 createList(); this.taskFrame = new NewTaskFrame(); //创建悬浮窗口 this.suspendWindow = new SuspendWindow(this); //创建任务栏图标 createTrayIcon(); //创建工具栏 createToolBar(); //得到屏幕大小 Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); //导航滚动 JScrollPane navPane = new JScrollPane(this.navTree); JScrollPane downloadPane = new JScrollPane(this.downloadTable); int downloadPaneHeight = (int)(screen.height/1.5); int downloadPaneWidth = (int)(screen.width/0.8); downloadPane.setPreferredSize(new Dimension(downloadPaneWidth, downloadPaneHeight)); JScrollPane infoPane = new JScrollPane(this.infoJList); //主界面右边的分隔Pane JSplitPane rightPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, downloadPane, infoPane); rightPane.setDividerLocation(500); rightPane.setDividerSize(3); //主界面的分隔Pane JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, navPane, rightPane); mainPane.setDividerSize(3); mainPane.setDividerLocation((int)(screen.width/5.5)); this.add(mainPane); this.setPreferredSize(new Dimension(screen.width, screen.height - 30)); this.setVisible(true); this.setTitle("下载工具"); this.pack(); initlisteners(); //创建定时器 Timer timer = new Timer(1000, refreshTable); timer.start(); //读取序列化文件 reverseSer(); } public NewTaskFrame getNewTaskFrame() { return this.taskFrame; } /** * 创建任务栏图标 */ private void createTrayIcon() { this.popupMenu.add(openItem); this.popupMenu.add(newItem); this.popupMenu.add(startItem); this.popupMenu.add(pauseItem); this.popupMenu.add(removeItem); this.popupMenu.add(quitItem); try { SystemTray tray = SystemTray.getSystemTray(); this.trayIcon = new TrayIcon(trayIconImage, "多线程下载工具", this.popupMenu); this.trayIcon.setToolTip("多线程下载工具"); tray.add(this.trayIcon); } catch (Exception e) { e.printStackTrace(); } } private void initlisteners() { //点击列表鼠标监听器 this.downloadTable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { //得到点击的资源 Resource r = getResource(); if (r == null) return; //设置信息显示区域的值 fileSize.setValue(FILE_SIZE_TEXT + r.getSize()); filePath.setValue(FILE_PATH_TEXT + r.getSaveFile().getAbsolutePath()); downloadDate.setValue(DOWNLOAD_DATE_TEXT + DateUtil.formatDate(r.getDownloadDate())); info.setValue(RESOURCE_INFO_TEXT + r.getState().getState()); //重新设置JList数据 infoJList.setListData(infoList.toArray()); } }); //点击导航树鼠标监听器 this.navTree.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { selectTree(); } }); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); } }); //任务栏图标监听器 this.trayIcon.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { setVisible(true); } } }); this.openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (isVisible()) setVisible(false); else setVisible(true); } }); this.newItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { taskFrame.setVisible(true); } }); this.startItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { startAllTask(); } }); this.pauseItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { pauseAllTask(); } }); this.removeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { deleteFinished(); } }); this.quitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { serializable(); System.exit(0); } }); } /** * 点击导航树触发的方法 */ private void selectTree() { DownloadNode selectNode = getSelectNode(); this.currentNode = selectNode; refreshTable(); } /** * 刷新列表 */ private void refreshTable() { DownloadTableModel model = (DownloadTableModel)this.downloadTable.getModel(); model.setResources(ContextHolder.ctx.getResources(currentNode)); } private DownloadNode getSelectNode() { TreePath treePath = this.navTree.getSelectionPath(); if (treePath == null) return null; //获得选中的TreeNode DefaultMutableTreeNode node = (DefaultMutableTreeNode)treePath.getLastPathComponent(); return (DownloadNode)node.getUserObject(); } private void addTableData() { DownloadTableModel model = (DownloadTableModel)this.downloadTable.getModel(); //将保存的资源设置到列表中 model.setResources(ContextHolder.ctx.resources); //刷新列表 this.downloadTable.refresh(); } /** * 反序列化 */ public void reverseSer() { File serFile = FileUtil.SERIALIZABLE_FILE; if (!serFile.exists()) return; try { //得到文件输入流 FileInputStream fis = new FileInputStream(serFile); ObjectInputStream ois = new ObjectInputStream(fis); //设置ContextHolder的DownloadContext ContextHolder.ctx = (DownloadContext)ois.readObject(); ois.close(); fis.close(); } catch (Exception e) { e.printStackTrace(); } //设置列表 addTableData(); } /** * 序列化(DownloadContext对象) */ public void serializable() { try { //序列化前先将所有正在下载的任务停止 for (Resource r : ContextHolder.ctx.resources) { if (r.getState() instanceof Downloading) { r.setState(ContextHolder.ctx.PAUSE); } } File serFile = FileUtil.SERIALIZABLE_FILE; //判断序列化文件是否存在, 不存在则创建 if (!serFile.exists()) serFile.createNewFile(); FileOutputStream fos = new FileOutputStream(serFile); ObjectOutputStream oos = new ObjectOutputStream(fos); //将上下文对象写到序列化文件中 oos.writeObject(ContextHolder.ctx); oos.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public JTable getDownloadTable() { return this.downloadTable; } private void createDownloadTable() { DownloadTableModel tableModel = new DownloadTableModel(); this.downloadTable = new DownloadTable(); this.downloadTable.setModel(tableModel); this.downloadTable.setTableFace(); } private void createToolBar() { this.toolBar.setFloatable(false); this.toolBar.add(this.newTask).setToolTipText("新下载任务"); this.toolBar.add(this.start).setToolTipText("开始任务"); this.toolBar.add(this.pause).setToolTipText("暂停"); this.toolBar.add(this.delete).setToolTipText("删除"); this.toolBar.add(this.deleteFinished).setToolTipText("移除已经完成的任务"); this.toolBar.setMargin(new Insets(5, 10, 5, 5)); this.add(this.toolBar, BorderLayout.NORTH); } private void start() { Resource r = getResource(); if (r == null) return; if (r.getState() instanceof Pause || r.getState() instanceof Failed) { ContextHolder.dh.resumeDownload(r); } } /** * 开始全部任务 */ public void startAllTask() { for (Resource r : ContextHolder.ctx.resources) { if (r.getState() instanceof Pause || r.getState() instanceof Failed) { ContextHolder.dh.resumeDownload(r); } } } /** * 暂停全部任务 */ public void pauseAllTask() { for (Resource r : ContextHolder.ctx.resources) { if (r.getState() instanceof Downloading) { r.setState(ContextHolder.ctx.PAUSE); } } } private void newTask() { this.taskFrame.setVisible(true); } private void pause() { Resource r = getResource(); if (r == null) return; //判断状态 if (!(r.getState() instanceof Downloading)) return; r.setState(ContextHolder.ctx.PAUSE); } /** * 删除资源 */ private void delete() { Resource r = getResource(); if (r == null) return; //先将任务停止 r.setState(ContextHolder.ctx.PAUSE); //删除所有的.part文件 FileUtil.deletePartFiles(r); //从上下文集合中删除资源 ContextHolder.ctx.resources.remove(r); } /** * 删除已下载完成的资源 */ public void deleteFinished() { for (Iterator it = ContextHolder.ctx.resources.iterator(); it.hasNext();) { Resource r = (Resource)it.next(); if (r.getState() instanceof Finished) { it.remove(); } } } /** * 得到用户在列表中所选择的资源 * @return */ private Resource getResource() { int row = this.downloadTable.getSelectedRow(); int column = this.downloadTable.getColumn(DownloadTableModel.ID_COLUMN).getModelIndex(); if (row == -1) return null; String id = (String)this.downloadTable.getValueAt(row, column); return ContextHolder.ctx.getResource(id); } /** * 创建树 */ private void createTree() { DefaultMutableTreeNode root = new DefaultMutableTreeNode(); DefaultMutableTreeNode tn = new DefaultMutableTreeNode(taskNode); root.add(tn); //创建各个节点 tn.add(new DefaultMutableTreeNode(downloadingNode)); tn.add(new DefaultMutableTreeNode(failNode)); tn.add(new DefaultMutableTreeNode(finishNode)); this.navTree = new NavigationTree(root); } private void createList() { this.infoJList = new JList(); this.infoList.add(this.fileSize); this.infoList.add(this.filePath); this.infoList.add(this.downloadDate); this.infoList.add(this.info); this.infoJList.setListData(infoList.toArray()); } }
评论
5 楼
每天一首喜欢的歌
2018-01-11
这是用什么软件做的
4 楼
ma546659141
2017-08-30
厉害
3 楼
shreo_2007
2015-11-16
完美运行.很强大.很好的学习资源
2 楼
盖世英雄_1988
2015-05-12
我去,楼主你为什么这么吊,太强大了。。支持楼主,顶顶顶顶。。。。。
1 楼
WLLT
2012-05-19
niu 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
发表评论
文章已被作者锁定,不允许评论。
-
swt table 自己造个轮子
2013-04-05 15:28 1074半年前的代码了,swt自带的table 感觉不是很漂亮,就 ... -
java实现阿里旺旺界面
2012-04-22 17:02 2950package com.topthinking.exing ... -
java实现透明窗体
2012-04-22 17:04 4127package free; import j ... -
java实现tab可关闭(chrome风格)
2012-04-22 17:05 4025* @author zhangtao packa ... -
java实现http代理服务
2012-04-22 17:03 22150package httpProxy; /***** ... -
设置可关闭的tab
2012-04-21 14:01 4291package demo.swing; imp ... -
java实现千千静听界面
2012-04-21 14:00 1553package com.tianlong.TTPla ... -
java渲染水晶按钮
2012-04-21 13:59 3106import java.awt.Color; ... -
Java获取系统软件安装列表
2012-04-21 13:58 3654/** * @author < ... -
测试Swing所有组件及其相应的事件
2012-04-21 13:57 1581import java.awt.BorderLayo ...
相关推荐
Java版仿迅雷多线程断点下载工具,简单版的,代码很有学习价值!
这是一款用java写的多线程的下载工具,主要是多线程的实现......。。。。。。。。。。。。。。。
模仿迅雷实现网页资源的下载,以及开始、暂停、删除等功能
断点续传德兴馆技术,HTTP FTP等下载软件
毕业设计多线程下载工具java实现,非常实用,稍加修改,添加一些新功能,可以供自已实用,或者用作毕业设计,非常完美。
java 仿造迅雷
仿迅雷的电影视频门户程序源码
实现下载功能,还未实现多线程下载和断点续传功能。
实例136 仿迅雷下载文件 396 第15章 图形编程 403 实例137 多变的按钮 403 实例138 自制对话框 405 实例139 模仿QQ空间的电子相册 409 实例140 会动的七彩文字 413 实例141 模仿3D渐层效果 416 实例142 模仿...
java安卓仿微信聊天软件源码 frontend-navigation 技术资讯信息导航,我想记录一些技术的地址方便自己没事的时候逛 列表 腾讯 阿里 百度 搜狐 新浪 360 携程 网易 迅雷 angular资源 微信html5开发框架 综合类 入门类...