tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
2827
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    eigentlich dürfte es nicht so schwer sein, aber ich dachte, dass es das Beispiel doch mal poste.

    So könnte man einen JTree umsetzen, der aussieht wie im WindowsExplorer.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    
    package explorer;
     
    import java.awt.Component;
    import java.io.File;
    import java.util.Enumeration;
     
    import javax.swing.JLabel;
    import javax.swing.JTree;
    import javax.swing.event.TreeExpansionEvent;
    import javax.swing.event.TreeExpansionListener;
    import javax.swing.filechooser.FileSystemView;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeCellRenderer;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeNode;
    import javax.swing.tree.TreePath;
     
    public class FileSystemTree
        extends JTree
    {
     
      private FileSystemView fileSystemView = FileSystemView.getFileSystemView();
     
      public FileSystemTree()
      {
        super();
        File[] roots = fileSystemView.getRoots();
     
        File file = roots[0];
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(file);
        node = prepareTreeNode(node);
     
        setModel(new DefaultTreeModel(node));
        setRootVisible(true);
        setCellRenderer(new DefaultTreeCellRenderer()
        {
     
          public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row,
              boolean hasFocus)
          {
            JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
            File f = (File)node.getUserObject();
            label.setText(fileSystemView.getSystemDisplayName(f));
            label.setIcon(fileSystemView.getSystemIcon(f));
            
            return label;
          }
     
        });
        
        
        addTreeExpansionListener(new TreeExpansionListener()
        {
     
          public void treeCollapsed(TreeExpansionEvent event)
          {
            TreePath path = event.getPath();
            TreeNode collapsedNode = (TreeNode) path.getLastPathComponent();
     
            TreePath selectedPath = getSelectionPath();
            TreeNode selectedNode = null;
            if (selectedPath != null)
            {
              selectedNode = (TreeNode) selectedPath.getLastPathComponent();
              if (isSelectedNodeInCollapsedNode(selectedNode.getParent(), collapsedNode))
              {
                setSelectionPath(path);
              }
            }
     
          }
          
          
          private boolean isSelectedNodeInCollapsedNode(TreeNode selectedNodeParent, TreeNode collapsedNode){
            if(selectedNodeParent == null){
              return false;
            }
            else if(collapsedNode.equals(selectedNodeParent)){
              return true;
            }
            else{
              return isSelectedNodeInCollapsedNode(selectedNodeParent.getParent(), collapsedNode);
            }
     
          }
     
          public void treeExpanded(TreeExpansionEvent event)
          {
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
            prepareChildTreeNodes(node);
     
          }
     
        });
     
        prepareChildTreeNodes(node);
        expandRow(0);
      }
     
      public DefaultMutableTreeNode prepareTreeNode(DefaultMutableTreeNode node)
      {
        File f = (File) node.getUserObject();
        File[] files = f.listFiles();
        for (int i = 0; i < files.length; i++)
        {
          File file = files[i];
          if (file.isDirectory())
            node.add(new DefaultMutableTreeNode(file));
        }
        return node;
      }
     
      private void prepareChildTreeNodes(DefaultMutableTreeNode node)
      {
        Enumeration<DefaultMutableTreeNode> e = node.children();
        while (e.hasMoreElements())
        {
          DefaultMutableTreeNode child = e.nextElement();
          prepareTreeNode(child);
        }
      }
     
    }

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  2. #2
    the_royal the_royal ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    71
    Hallo
    Ich weiss, der Eintrag ist schon ziemlich alt, aber vielleicht kann mir ja trotzdem noch jemand helfen...
    Das wäre eigentlich genau was ich brauche.. nur werden hier dummerweise die Files nicht angezeigt?
    Kann mir jemand sagen, was ich ändern muss, damit die einzelnen Files auch angezeigt werden?

    Besten Dank im Voraus!

    Gruss the_royal
     

  3. #3
    mc_gulasch mc_gulasch ist offline Mitglied Brokat
    Registriert seit
    Jun 2006
    Ort
    (Bayern)
    Beiträge
    255
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    public DefaultMutableTreeNode prepareTreeNode(DefaultMutableTreeNode node)
      {
        File f = (File) node.getUserObject();
        File[] files = f.listFiles();
        for (int i = 0; i < files.length; i++)
        {
          File file = files[i];
          if (file.isDirectory())
            node.add(new DefaultMutableTreeNode(file));
        }
        return node;
      }

    Bin jetzt nicht so in dem Code drin, aber beim Überfliegen hätt ich mal gesagt versuch doch in o.g. Funktion die if-Abfrage rauszulassen. Dabei wir ein Knoten nur geadded, falls er ein Verzeichnis ist. Aber willst du in Deinem Baum wirklich auch die Dateien? Egal...Deine Sache
     
    There´re 10 kinds of people: The one who understand binary, and the others!

    {2b|^(2b)} - Shakespear


    "Offensichtlich spielst du kein Golf" (der Dude)


    Total egal wie bescheuert meine Frage auch ist: Ich bin NICHT Sven Uwe!

  4. #4
    the_royal the_royal ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    71
    haha hätte mir den Code auch etwas genauer ansehen sollen, dann hätte ich das eigentlich auch sehen müssen. =)

    Ja, brauch das wirklich so. Wir versuchen gerade ein Musiksortier-Programm zu basteln und dann bringt es mir nich viel wenn ich die Ordner, nicht aber die Dateien sehe... :P

    Vielen Dank für die rasche Hilfe!

    gruss the_royal