<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    [原創]JAVA編寫的帶有復選框的資源管理器樹目錄

        --sunfruit

        用JAVA實現了帶有復選框的樹目錄


        JDK版本
            JDK1.4.x
        功能
            實現了帶有復選框的資源管理器樹目錄,還有需要改進的地方,我在以后更新,如果那位朋友有好的建議歡迎提出
       
        歡迎大家提意見,交流
       
        代碼如下
       
    import javax.swing.tree.*;
    import javax.swing.filechooser.*;
    import javax.swing.event.*;
    import java.awt.Cursor;
    import java.awt.Component;
    import java.awt.Font;
    import java.io.*;
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;

    /**
     * Title: 系統級樹目錄
     * Description: 
     * Copyright: Copyright (c) 2004
     * Company: 
     * @author cuijiang contact cj0063@sina.com or cuij7718@yahoo.com.cn
     * @version 1.0
     */
    public class AgileSuperJTreeBasic
        extends JTree
        implements TreeExpansionListener, TreeSelectionListener, MouseListener {
      protected DefaultTreeModel treeModel;
      protected FileSystemView fileSystemView; //建立文件系統視類對象
      protected FileNode root;

      public AgileSuperJTreeBasic() {
        Font myFont = new Font("宋體", 11, 12);
        fileSystemView = FileSystemView.getFileSystemView();
        root = new FileNode(fileSystemView.getRoots()[0]);
        root.explore();
        treeModel = new DefaultTreeModel(root);
        this.setModel(treeModel); //設定樹形菜單
        this.addTreeExpansionListener(this); //打開/關閉節點事件
        this.addTreeSelectionListener(this); //選擇的事件
        this.setCellRenderer(new MyTreeCellRenderer()); //生成圖標
        this.setFont(myFont);
        this.setRootVisible(true);
        this.setRowHeight(18);
        this.addMouseListener(this);
      }

      //圖標生成類
      protected class MyTreeCellRenderer
          extends JPanel
          implements TreeCellRenderer {
        JCheckBox check = new JCheckBox();
        BorderLayout borderLayout1 = new BorderLayout();
        JLabel label = new JLabel();
        public MyTreeCellRenderer() {
          this.setLayout(null);

          this.add(check);
          this.add(label);
          check.setBackground(UIManager.getColor("Tree.textBackground"));
          label.setBackground(UIManager.getColor("Tree.textBackground"));
          this.setBackground(UIManager.getColor("Tree.textBackground"));

        }

        public Dimension getPreferredSize() {
          Dimension checkDimension = check.getPreferredSize();
          Dimension labelDimension = label.getPreferredSize();
          return new Dimension(checkDimension.width + labelDimension.width,
                               (checkDimension.height < labelDimension.height ?
                                labelDimension.height : checkDimension.height));
        }

        public Component getTreeCellRendererComponent(JTree tree, Object value,
                                                      boolean sel, boolean expanded,
                                                      boolean leaf, int row,
                                                      boolean hasFocus) {
          String stringValue = tree.convertValueToText(value, sel, expanded, leaf,
              row, hasFocus);
          setEnabled(tree.isEnabled());
          label.setFont(tree.getFont());
          check.setSelected( ( (FileNode) value).isSelected());
          //設置圖標為系統的文件類型圖標
          FileSystemView fileSystemView = FileSystemView.getFileSystemView();
          label.setIcon(fileSystemView.getSystemIcon( ( (FileNode) value).getFile()));
          label.setText(stringValue);
          return this;
        }

        public void doLayout() {
          Dimension checkDimension = check.getPreferredSize();
          Dimension labelDimension = label.getPreferredSize();
          int checkY = 0;
          int labelY = 0;
          if (checkDimension.height > labelDimension.height) {
            labelY = (checkDimension.height - labelDimension.height) / 2;
          }
          else {
            checkY = (labelDimension.height - checkDimension.height) / 2;
          }
          check.setLocation(0, checkY);
          check.setBounds(0, checkY, checkDimension.width, checkDimension.height);
          label.setLocation(checkDimension.width, labelY);
          label.setBounds(checkDimension.width, labelY, labelDimension.width,
                          labelDimension.height);
        }

      }

      //節點張開事件
      public void treeExpanded(TreeExpansionEvent event) {
        //判斷是否是葉節點
        //if (this.getLastSelectedPathComponent() == null) {
          //System.out.println("ok");
          //return;
        //}
        setCursor(new Cursor(Cursor.WAIT_CURSOR));
        TreePath path = event.getPath();
        //System.out.println(path.toString());
        FileNode node = (FileNode) path.getLastPathComponent();
        node.explore();
        treeModel.nodeStructureChanged(node);
        this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

      }

      //節點閉合事件
      public void treeCollapsed(TreeExpansionEvent event) {

      }

      //文件節點類
      protected class FileNode
          extends DefaultMutableTreeNode {

        private boolean isSelected = false;
        private boolean explored = false;

        public FileNode(File file) {
          this(file, false);
        }

        public FileNode(File file, boolean bool) {
          super(file);
          this.isSelected = bool;
        }

        //
        public boolean isSelected() {
          return isSelected;
        }

        public void setSelected(boolean isSelected) {
          this.isSelected = isSelected;
          if (children != null) {
            Enumeration enum = children.elements();
            while (enum.hasMoreElements()) {
              FileNode node = (FileNode) enum.nextElement();
              node.setSelected(isSelected);
            }
          }
        }

        //
        public boolean getAllowsChildren() {
          return isDirectory();
        }

        public boolean isLeaf() {
          return!isDirectory();
        }

        public File getFile() {
          return (File) getUserObject();
        }

        public boolean isExplored() {
          return explored;
        }

        public void setExplored(boolean b) {
          explored = b;
        }

        public boolean isDirectory() {
          return getFile().isDirectory();
        }

        public String toString() {
          File file = (File) getUserObject();
          String filename = file.toString();
          int index = filename.lastIndexOf(File.separator);
          return (index != -1 && index != filename.length() - 1)
              ? filename.substring(index + 1) : filename;
        }

        public void explore() {
          if (!isExplored()) {
            File file = getFile();
            File[] children = file.listFiles();
            if (children == null || children.length == 0)
              return;
            for (int i = 0; i < children.length; ++i) {
              File f = children[i];
              if (f.isDirectory())
                add(new FileNode(children[i], isSelected));
            }
            explored = true;
          }
        }

      }

      /**
       * 選擇節點觸發的事件
       * 繼承或是直接引用需要重新寫此方法
       * @param e
       */
      public void valueChanged(TreeSelectionEvent e) {
        //文件路徑
        String sFilePath = "";
        Object myobj = this.getLastSelectedPathComponent();
        if (myobj != null) {
          sFilePath = ( (File) ( ( (DefaultMutableTreeNode) (myobj)).getUserObject())).
              getPath();
        }
        //System.out.println(sFilePath);
      }

      /**
       * Invoked when the mouse button has been clicked (pressed and released) on a
       * component.
       * @param e MouseEvent
       * @todo Implement this java.awt.event.MouseListener method
       */
      public void mouseClicked(MouseEvent e) {
        int count = e.getClickCount();

        if (count != 1) {
          //System.out.println(count);

        }
        else {
          int x = e.getX();
          int y = e.getY();
          int row = this.getRowForLocation(x, y);
          TreePath path = this.getPathForRow(row);
          if (path != null) {
            FileNode node = (FileNode) path.getLastPathComponent();
            boolean isSelected = ! (node.isSelected());
            node.setSelected(isSelected);
            ( (DefaultTreeModel)this.getModel()).nodeChanged(node);
          }
        }

      }

      /**
       * Invoked when a mouse button has been pressed on a component.
       * @param e MouseEvent
       * @todo Implement this java.awt.event.MouseListener method
       */
      public void mousePressed(MouseEvent e) {
      }

      /**
       * Invoked when a mouse button has been released on a component.
       * @param e MouseEvent
       * @todo Implement this java.awt.event.MouseListener method
       */
      public void mouseReleased(MouseEvent e) {
      }

      /**
       * Invoked when the mouse enters a component.
       * @param e MouseEvent
       * @todo Implement this java.awt.event.MouseListener method
       */
      public void mouseEntered(MouseEvent e) {
      }

      /**
       * Invoked when the mouse exits a component.
       * @param e MouseEvent
       * @todo Implement this java.awt.event.MouseListener method
       */
      public void mouseExited(MouseEvent e) {
      }
    }

    posted on 2006-02-19 14:36 Vincent.Chen 閱讀(879) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 亚洲人成影院在线观看| 国产一区二区三区在线免费| 亚洲综合国产一区二区三区| 国产精品自拍亚洲| 国产精品国产午夜免费福利看| 亚洲成a∧人片在线观看无码| 成年女人毛片免费视频| 亚洲日韩国产一区二区三区在线 | 黄色视频在线免费观看| 国产jizzjizz视频全部免费| 在线观看亚洲免费视频| 免费va在线观看| rh男男车车的车车免费网站| 亚洲中文字幕在线第六区| 老司机精品免费视频| 亚洲乱码日产一区三区| 午夜老司机永久免费看片| 亚洲国产夜色在线观看| 日韩精品免费一区二区三区| 人妻仑刮八A级毛片免费看| 亚洲熟女乱综合一区二区 | 亚洲精品免费视频| 亚洲成人一级电影| 午夜一级免费视频| 女人裸身j部免费视频无遮挡| 亚洲国产a∨无码中文777| 91久久精品国产免费一区| 亚洲综合av一区二区三区| 四虎永久免费网站免费观看| 国产免费高清69式视频在线观看| 日韩亚洲AV无码一区二区不卡| 在线观看免费人成视频色9| 污视频网站免费在线观看| 亚洲AV午夜成人片| 免费毛片在线看片免费丝瓜视频 | 亚洲欧美aⅴ在线资源| 美腿丝袜亚洲综合| 啦啦啦完整版免费视频在线观看 | 亚洲成?Ⅴ人在线观看无码| 亚欧日韩毛片在线看免费网站| 中国亚洲呦女专区|