?? downloadpanel.java
字號:
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 + -