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

📄 downloadpanel.java

📁 该系统是一个基于p2p的即时聊天系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            DefaultMutableTreeNode node = null;            for (int i = 0; i < FRIEND_ROOT.getChildCount(); i++) {                node = (DefaultMutableTreeNode) FRIEND_ROOT.getChildAt(i);                if (node.getUserObject().toString().equals(id)) {                    break;                } else {                    node = null;                }            }            if (node != null) {                int r = friendTree.getRowForPath(new TreePath(node.getPath()));                friendModel.removeNodeFromParent(node);                friendTree.setSelectionRow(r - 1);            }        }        /**         * 返回选中好友的ID         *         * @return 选中好友的ID         */        public String getSelectedFriendID() {            String id = null;            DefaultMutableTreeNode node = (DefaultMutableTreeNode) friendTree                .getSelectionPath().getLastPathComponent();            if (node != FRIEND_ROOT) {                id = node.getUserObject().toString();            }            return id;        }        /**         * 装载好友         *         * @param info 指定的用户信息         */        private void loadFriends(UserInfo info) {            List friends = info.getFriendsInfo().getAllFriends();            for (int i = 0; i < friends.size(); i++) {                DefaultMutableTreeNode child =                    new DefaultMutableTreeNode(friends.get(i));                friendModel.insertNodeInto(child, FRIEND_ROOT, i);            }            friendTree.expandRow(0);            friendTree.setSelectionRow(0);        }        /**         * 卸载好友         */        private void unloadFriends() {            int count = FRIEND_ROOT.getChildCount();            for (int i = 0; i < count; i++) {                friendModel.removeNodeFromParent(                    (DefaultMutableTreeNode) FRIEND_ROOT.getChildAt(0));            }        }        /**         * 设置树型组件的单元格渲染器         */        private void setTreeCellRenderer() {            final DefaultTreeCellRenderer renderer1 =                (DefaultTreeCellRenderer) friendTree.getCellRenderer();            DefaultTreeCellRenderer renderer2 = new DefaultTreeCellRenderer() {                public Component getTreeCellRendererComponent(JTree tree,                    Object value, boolean selected, boolean expanded,                    boolean leaf, int row, boolean hasFocus) {                    Component c = renderer1.getTreeCellRendererComponent(tree,                        value, selected, expanded, leaf, row, hasFocus);                    JLabel label = (JLabel) c;                    if (value == FRIEND_ROOT) {                        label.setIcon(ImageShop.USER_ROOT_IMAGEICON);                    } else {                        label.setIcon(ImageShop.USER_IMAGEICON);                    }                    return c;                }            };            friendTree.setCellRenderer(renderer2);        }        /**         * 实现TreeSelectionListener接口的方法         *         * @param event TreeSelectionEvent对象         */        public void valueChanged(TreeSelectionEvent event) {            DefaultMutableTreeNode node = (DefaultMutableTreeNode) event                .getPath().getLastPathComponent();            if (node == FRIEND_ROOT) {                fileViewPanel.reloadFiles(null);            } else {                fileViewPanel.reloadFiles(node.toString());            }        }    }    /**     * 文件视图面板     */    class FileViewPanel extends JPanel implements TreeSelectionListener {        /**         * 文件树的视图         */        private JTree fileTree;        /**         * 文件树的模型         */        private DefaultTreeModel fileModel;        /**         * Create a new instance of this class         */        public FileViewPanel() {            super(new GridBagLayout());            //文件视图标签            GridBagConstraints constraints = new GridBagConstraints(                //gridx, gridy                0, 0,                //gridwidth, gridheight                1, 1,                //weightx, weighty                0.0, 0.0,                //anchor                GridBagConstraints.NORTHWEST,                //fill                GridBagConstraints.NONE,                //insets                new Insets(0, 5, 0, 0),                //ipadx, ipady                0, 0);            add(new JLabel("文件视图"), constraints);            //树型组件            fileModel = new DefaultTreeModel(FILE_ROOT);            fileTree = new JTree(fileModel);            fileTree.addTreeSelectionListener(this);            setTree(fileTree);            setTreeCellRenderer();            JScrollPane scroller = new JScrollPane(fileTree,                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);            constraints.gridy = 1;            constraints.weightx = 1.0;            constraints.weighty = 1.0;            constraints.fill = GridBagConstraints.BOTH;            constraints.insets = new Insets(0, 0, 0, 0);            add(scroller, constraints);        }        /**         * 返回选中的下载文件         *         * @return 选中的下载文件         */        public String getSelectedFile() {            String file = null;            DefaultMutableTreeNode node = (DefaultMutableTreeNode) fileTree                .getSelectionPath().getLastPathComponent();            if (node != FILE_ROOT) {                file = node.getUserObject().toString();            }            return file;        }        /**         * 重载文件         *         * @param id 指定的用户         */        public void reloadFiles(String id) {            unloadFiles();            if (id != null) {                loadFiles(id);            }        }        /**         * 装载文件         *         * @param id 指定的用户         */        private void loadFiles(String id) {            try {                XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");                XmlRpcClient client = new XmlRpcClient(genURL());                String response = client.execute(genRequest()).toString();                SAXBuilder builder = new SAXBuilder();                StringReader reader = new StringReader(response);                Document document = builder.build(reader);                Element root = document.getRootElement();                List shares = root.getChild("Shares").getChildren();                for (int i = 0; i < shares.size(); i++) {                    Element share = (Element) shares.get(i);                    if (share.getAttributeValue("id").equals(id)) {                        List files = share.getChild("Files").getChildren();                        for (int j = 0; j < files.size(); j++) {                            Element file = (Element) files.get(j);                            DefaultMutableTreeNode node =                                new DefaultMutableTreeNode(                                file.getAttributeValue("file"));                            fileModel.insertNodeInto(node, FILE_ROOT, j);                        }                        break;                    }                }                fileTree.expandRow(0);                fileTree.setSelectionRow(0);            } catch (ClassNotFoundException e) {                JOptionPane.showMessageDialog(Smart.getInstance(),                    "系统找不到类库“org.apache.xerces.parsers.SAXParser”!",                    StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE);            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (XmlRpcException e) {                e.printStackTrace();            } catch (IOException e) {                JOptionPane.showMessageDialog(Smart.getInstance(),                    "获取服务已关闭,请稍候再试!", StringShop.HINT_TITLE,                    JOptionPane.INFORMATION_MESSAGE);            } catch (JDOMException e) {                JOptionPane.showMessageDialog(Smart.getInstance(),                    "操作失败,请稍候再试!", StringShop.HINT_TITLE,                    JOptionPane.INFORMATION_MESSAGE);            }        }        /**         * 卸载文件         */        private void unloadFiles() {            int count = FILE_ROOT.getChildCount();            for (int i = 0; i < count; i++) {                fileModel.removeNodeFromParent(                    (DefaultMutableTreeNode) FILE_ROOT.getChildAt(0));            }        }        /**         * 设置树型组件的单元格渲染器         */        private void setTreeCellRenderer() {            final DefaultTreeCellRenderer renderer1 =                (DefaultTreeCellRenderer) fileTree.getCellRenderer();            DefaultTreeCellRenderer renderer2 = new DefaultTreeCellRenderer() {                public Component getTreeCellRendererComponent(JTree tree,                    Object value, boolean selected, boolean expanded,                    boolean leaf, int row, boolean hasFocus) {                    Component c = renderer1.getTreeCellRendererComponent(tree,                        value, selected, expanded, leaf, row, hasFocus);                    JLabel label = (JLabel) c;                    if (value == FILE_ROOT) {                        label.setIcon(ImageShop.SHARE_ROOT_IMAGEICON);                    } else {                        label.setIcon(ImageShop.SHARE_IMAGEICON);                    }                    return c;                }            };            fileTree.setCellRenderer(renderer2);        }        /**         * 实现TreeSelectionListener接口的方法         *         * @param event TreeSelectionEvent对象         */        public void valueChanged(TreeSelectionEvent event) {            DefaultMutableTreeNode node = (DefaultMutableTreeNode) event                .getPath().getLastPathComponent();            List files = taskListPanel.getAllDownloadingFile();            if (node == FILE_ROOT) {                DownloadAction.getInstance().setEnabled(false);            } else {                if (files.contains(getSelectedFile()) == false) {                    DownloadAction.getInstance().setEnabled(true);                } else {                    DownloadAction.getInstance().setEnabled(false);                }            }        }    }    /**     * 任务列表面板     */    class TaskListPanel extends JPanel {        /**         * 下载任务表格的视图         */        private JTable taskTable;        /**         * 下载任务表格的模型         */        private DefaultTableModel taskModel;        /**         * Create a new instance of this class         */        public TaskListPanel() {            super(new GridBagLayout());            //下载任务标签            GridBagConstraints constraints = new GridBagConstraints(                //gridx, gridy                0, 0,                //gridwidth, gridheight                1, 1,                //weightx, weighty                0.0, 0.0,                //anchor                GridBagConstraints.NORTHWEST,                //fill                GridBagConstraints.NONE,                //insets                new Insets(0, 5, 0, 0),                //ipadx, ipady                0, 0);            add(new JLabel("下载任务"), constraints);            //下载任务表格            Object[] header = {"好友", "共享名", "文件名", "进度"};            taskModel = new DefaultTableModel();            taskModel.setColumnIdentifiers(header);            taskTable = new JTable(taskModel) {                public boolean isCellEditable(int row, int column) {                    return false;                }            };            taskTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);            ProgressRenderer renderer = new ProgressRenderer(0, 100);            taskTable.getColumn("进度").setCellRenderer(renderer);            JScrollPane scroller = new JScrollPane(taskTable,                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);            constraints.gridy = 1;            constraints.weightx = 1.0;            constraints.weighty = 1.0;            constraints.fill = GridBagConstraints.BOTH;            constraints.insets = new Insets(0, 0, 0, 0);            add(scroller, constraints);        }        /**         * 添加行         *         * @param file 文件名         * @param progress 下载进度         */        public void addRow(String file, int progress) {            Object[] row = {friendViewPanel.getSelectedFriendID(),                fileViewPanel.getSelectedFile(), file, new Integer(progress)};            taskModel.addRow(row);            int count = taskModel.getRowCount();            taskTable.getSelectionModel().setSelectionInterval(count, count);        }        /**         * 删除行         *         * @param file 文件名         */        public void deleteRow(String file) {            int i;            for (i = 0; i < taskModel.getRowCount(); i++) {                if (taskModel.getValueAt(i, 2).equals(file)) {                    taskModel.removeRow(i);                    break;                }            }            if (taskModel.getRowCount() > 0) {                taskTable.getSelectionModel().setSelectionInterval(i, i);            }        }        /**         * 设置进度         *         * @param file 文件名         * @param progress 下载进度         */        public void setProgress(String file, int progress) {            for (int i = 0; i < taskModel.getRowCount(); i++) {                if (taskModel.getValueAt(i, 2).equals(file)) {                    taskModel.setValueAt(new Integer(progress), i, 3);                    break;                }            }        }        /**         * 返回所有正在下载的文件         *         * @return 所有正在下载的文件         */        public List getAllDownloadingFile() {            List files = new ArrayList();            for (int i = 0; i < taskModel.getRowCount(); i++) {                files.add(taskModel.getValueAt(i, 1));            }            return files;        }    }}

⌨️ 快捷键说明

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