Martin240
Grünschnabel
Hallo zusammen.
Ich habe eine kleine Methode geschrieben, die aus einer Collection von File-Objekten einen JTree aufbaut. Da ich per Google nichts dazu gefunden habe musste eine eigene Methode her und da wollte ich natürlich auch wissen was ihr davon haltet. Ihr könnt die Methode gerne benutzen wenn ihr sie braucht.
Jegliche Art von Kritik ist genehm. Hier ein Anzeigebeispiel (mit JTattoo-LookAndFeel) erstellt aus einer Liste von Bildern auf meiner Platte:
Und hier der Code:
Ich habe eine kleine Methode geschrieben, die aus einer Collection von File-Objekten einen JTree aufbaut. Da ich per Google nichts dazu gefunden habe musste eine eigene Methode her und da wollte ich natürlich auch wissen was ihr davon haltet. Ihr könnt die Methode gerne benutzen wenn ihr sie braucht.
Jegliche Art von Kritik ist genehm. Hier ein Anzeigebeispiel (mit JTattoo-LookAndFeel) erstellt aus einer Liste von Bildern auf meiner Platte:

Und hier der Code:
Code:
/**
* Gibt einen JTree zurück, der die übergebene Collection aus Files
* als Baum darstellt. Der zweite Parameter regelt die Darstellung
* von Dateien. Sollen diese mit im JTree angezeigt werden so ist
* dieser Wert auf true zu setzen.
@author Martin J.
*
@param files Eine Collection von Files
*
@param displayFiles Sollen die Dateien im JTree mit angezeigt werden?
*
@return Ein fertiger JTree
*
@see JTree
*/
private static JTree createTree(Collection<File> files, Boolean displayFiles){
// Wird später für die Anzeige des Baumes mit oder ohne
// die Dateien benötigt.
int diff = 0;
if(!displayFiles) diff = -1;
// Hier erstellen wir einmal den Root-Knoten und einen
// Zeiger auf den aktuellen Knoten
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Root");
DefaultMutableTreeNode now = null;
// Zwei Variablen die wir später brauchen um zu bestimmen
// ob der Knoten schon existiert und an welcher Position
Boolean found = false;
int pos = 1;
for(File s : files) {
// Um das ganze unabhängig zu machen ersetzen wir erstmal die
// Trennsymbole der Verzeichnisse auf den Linuxstandard und dann
// zerlegen wir den Pfad in seine Verzeichnisse und die Datei
// selber. Außerdem setzen wir das aktuelle Element auf das obere.
String st = s.getAbsolutePath().replaceAll("\\\\", "/");
String[] parts = st.split("/");
now = top;
// Jetzt müssen wir das gerade zerlegte Verzeichnis in den Baum
// eintragen.
for(int i=0;i<parts.length+diff;i++) {
// Hier filtern wir noch die doppelten Backslashes raus die
// Java in Windows nach dem Wurzelverzeichnis zurückgibt
if(!parts[i].equals("")) {
// Dann gehen wir alle Kinder durch und schauen ob sie den
// Namen unseres einzutragenden Knotens tragen. Sollte das
// der Fall sein dann merken wir uns das und speichern auch
// noch die passende Knotennummer.
for(int j=0;j<now.getChildCount();j++) {
if(now.getChildAt(j).toString().equals(parts[i])) {
found = true;
pos = j;
}
}
// Haben wir nichts gefunden so können wir den neuen Knoten
// hinzufügen und springen auch gleich zu diesem.
if(!found) {
now.add(new DefaultMutableTreeNode(parts[i]));
now = (DefaultMutableTreeNode) now.getLastChild();
}
// Sonst springen wir zu dem den wir eben gefunden haben
else {
now = (DefaultMutableTreeNode) now.getChildAt(pos);
}
// Variable zurücksetzen und weiter gehts mit dem nächsten
// Teil des File Strings.
found = false;
}
}
}
// Noch ein paar Einstellungen für die Darstellung und ob die Dateien
// mit angezeigt werden.
JTree jt = new JTree(top);
jt.setRootVisible(false);
jt.setShowsRootHandles(true);
if(!displayFiles) {
DefaultTreeCellRenderer dtcr = new DefaultTreeCellRenderer();
dtcr.setLeafIcon(dtcr.getClosedIcon());
jt.setCellRenderer(dtcr);
}
return jt;
}