<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

    主站蜘蛛池模板: 国产成人免费片在线观看| 久久99免费视频| 日韩高清在线免费看| 亚洲av成人综合网| 免费看污成人午夜网站| 色婷婷六月亚洲婷婷丁香| 8x8x华人永久免费视频| 亚洲视频在线观看免费视频| 免费A级毛片无码视频| 亚洲欧洲自拍拍偷午夜色| 91麻豆最新在线人成免费观看 | 两性色午夜视频免费播放| 国产成人精品亚洲精品| 久久一区二区三区免费| 国产亚洲一区二区三区在线| 久久久久久国产精品免费免费男同 | 国产线视频精品免费观看视频| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久久久国色AV免费观看| 亚洲精品美女久久久久99| 免费成人高清在线视频| 亚洲欧洲日产国码在线观看| 久久精品网站免费观看| 亚洲AV无码AV吞精久久| 亚洲精品成人区在线观看| 国产午夜精品久久久久免费视| 亚洲第一二三四区| 国产黄色片在线免费观看| jizz免费观看| 亚洲综合激情九月婷婷| 韩国日本好看电影免费看| 一本到卡二卡三卡免费高| 亚洲综合视频在线| 成人黄动漫画免费网站视频 | 亚洲精品乱码久久久久久V | 亚洲大片在线观看| a毛片基地免费全部视频| 高潮毛片无遮挡高清免费视频| 亚洲精品无码国产| 无码中文字幕av免费放| 精品多毛少妇人妻AV免费久久|