# JTree: alle Laufwerke anzeigen



## bernd (9. Aug 2004)

```
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.io.File;

public class FileTreeDemo {
  public static void main(String[] args) {
    // Finde heraus, wo im Dateisystem die Anzeige beginnt
    File root;
    if (args.length > 0) root = new File(args[0]);
    else root = new File(System.getProperty("user.home"));

    // Erzeuge ein TreeModel-Objekt zur Repräsentation des Dateibaums
    FileTreeModel model = new FileTreeModel(root);

    // Erzeuge einen JTree, und beauftrage ihn mit der Anzeige unseres Modells
    JTree tree = new JTree();
    tree.setModel(model);

    // Der JTree kann groß werden; ermögliche also Scrollen
    JScrollPane scrollpane = new JScrollPane(tree);

    // Zeige all das in einem Fenster an, und lasse dieses erscheinen
    JFrame frame = new JFrame("FileTreeDemo");
    frame.getContentPane().add(scrollpane, "Center");
    frame.setSize(400,600);
    frame.setVisible(true);
  }
}

/**
 * Die Methoden dieser Klasse ermöglichen der JTree-Komponente das Durchlaufen des
 * Dateibaums und zeigen die Dateien und Verzeichnisse an.
 **/
class FileTreeModel implements TreeModel {
  // Wir geben das Wurzelverzeichnis bei der Erzeugung des Modells an.
  protected File root;
  public FileTreeModel(File root) { this.root = root; }

  // Das Modell weiß, wie das Wurzelobjekt des Baums zurückgegeben wird.
  public Object getRoot() { return root; }

  // Teile dem JTree mit, ob das Objekt ein Blatt ist.
  public boolean isLeaf(Object node) {  return ((File)node).isFile(); }

  // Teile dem JTree mit, wie viele Kinder ein Knoten besitzt
  public int getChildCount(Object parent) {
    String[] children = ((File)parent).list();
    if (children == null) return 0;
    return children.length;
  }

  // Hole ein beliebiges numeriertes Kind eines Baumknotens.
  // Unser Modell gibt Datei-Objekte für alle Knoten des Baums zurück.
  // Der JTree zeigt diese durch Aufruf der Methode File.toString() an.
  public Object getChild(Object parent, int index) {
    String[] children = ((File)parent).list();
    if ((children == null) || (index >= children.length)) return null;
    return new File((File) parent, children[index]);
  }

  // Bestimme die Position eines Kindes in seinem Elternknoten.
  public int getIndexOfChild(Object parent, Object child) {
    String[] children = ((File)parent).list();
    if (children == null) return -1;
    String childname = ((File)child).getName();
    for(int i = 0; i < children.length; i++) {
      if (childname.equals(children[i])) return i;
    }
    return -1;
  }

  // Diese Methode wird vom JTree nur für bearbeitbare Bäume aufgerufen.
  // Da dieses TreeModel keine Bearbeitung erlaubt, implementieren wir diese
  // Methode nicht. Die Eigenschaft editable des JTree ist per Voreinstellung false.
  public void valueForPathChanged(TreePath path, Object newvalue) {}

  // Da dieses Modell nicht bearbeitbar ist, setzen wir keine Events ab
  // und müssen uns daher auch nicht um eventuell betroffene Listener kümmern.
  public void addTreeModelListener(TreeModelListener l) {}
  public void removeTreeModelListener(TreeModelListener l) {}
}
```

Hallo zusammen, dieser JTree zeigt mir meine Festplatte mit der Wurzel bei c: beginnend an (user.home).
Ich hätte aber gerne alle Partitionen angezeigt, hat einer ne Idee wie ich das hinbekomme???

Danke.


----------



## Beni (9. Aug 2004)

```
File.listRoots();
```

Oder über das FileSystemView-


----------



## Cyrus (27. Apr 2006)

Ich habe das selbe versucht und das FileSystemView eingebaut. Bei mir bekomme ich aber immer einen Fehler beim Compilieren.

cannot find symbol
symbol  : constructor File(java.io.File[])
location: class java.io.File
if (dirs.length > 0) root = new File(dirs[0]);

Hier mein Code.


```
FileSystemView fsv = FileSystemView.getFileSystemView();
File[] dirs = fsv.getRoots();
File root;
if (dirs.length > 0) root = new File(dirs[0]);
else root = new File(System.getProperty("user.home"));
```


Woran lieg das? dir[0] hat den gewünschten Wert von meinem Desktop mit dem entsprechenden Pfad (C:\Dokumente und Einstellungen\User\Desktop).
Oder kann ich die verschiedenen Laufwerke anders in dem JTree implementieren?


----------



## math66 (27. Apr 2006)

na ja, File bekommt als argument einen string und kein File object. da bei dir aber dirs ein FIle ist, eghts nicht. das wäre ja sowas wie 


```
File f = new File(new File("file"));
```


probier mal so:


```
....new File(dirs[0].toString());
```

sollte gehen.


----------

