tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von Franz Degenhardt
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
963
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    klaus1985 klaus1985 ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    19
    Hallo,
    ich stehe vor einem Problem. Ich habe eine Datenbank in der Einträge sind, die Ordner bzw Unterordner darstellen. Sie ist nach dem "Nested Set Model" aufgebaut. Außerdem steht in jeder Tabellenzeile auch noch eine Folder-ID die ID des Parent-Ordner. Das will ich jetzt in einen TreeView hineinbekommen, bzw. eben einen Baum mit Objekten erstellen.
    Dafür habe ich die Klasse "Node" erstellt, die wiederum in einem Array weitere Nodes aufnehmen kann. Das erstellen klappt auch zum Teil, sobald allerdings viele Unterordner hinzukommen, ist's vorbei.
    Mit einer while-Schleife gehe ich durch das ResultSet, das mir die Tabelle liefert. Mit folgender Funktion versuche ich den Ordner zu finden, in den der neue hineinkommen soll:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    public Node getNode(Node parent, int parentFolderID, String name) 
        {
            for (Object o : parent.children) {
                if (o instanceof Node)
                {
                    Node n = (Node)o;
                    if (n.ID == parentFolderID)
                        return n;
                    else if (n.children.size() != 0)
                        return getNode(n, parentFolderID, name);
                }
            }
            return null;
        }
    parent ist immer der Root-Ordner (darin sind dann die anderen mit weiteren Unterordnern). Es sieht also ungefähr so aus:
    root
    - F1
    -- F1.1
    --- F1.3
    -- F1.2
    - F2

    Wenn jetzt ein Ordner in F2 reingehört, startet die Funktion eben bei F1, geht die Unterordner durch und - aus ist's. Also nix bis F2...
     

  2. #2
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Wenn du eine Datennbank verwendest, dann lasse dir den Pfad doch als einzelnen String von ihr liefern. Das kann man mit GROUP_CONCAT verwirklichen, hier ist ein gutes Beispiel von yaslaw.
    Diesen Pfad kannst du dann als key für einen HashTree verwenden, und die einzelnen Bestandteile kannst du mit der split-Methode bekommen.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  3. #3
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    375
    Das hat Spass gemacht.
    Das Problem war, dass die letzte return Anweisung für den Fall dass der erste Zweig bis ins letzte Kindelement läuft null zurückgibt.

    Code :
    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
    
    import java.util.ArrayList;
    import java.util.List;
     
    public class Rekursiv {
        public Rekursiv() {
            Node root = new Node("root");
            Node f1 = new Node("f1");
            Node f11 = new Node("f11");
            Node f12 = new Node("f12");
            Node f13 = new Node("f13");
            Node f2 = new Node("f2");
            root.children.add(f1);
            f1.children.add(f11);
            f1.children.add(f12);
            f11.children.add(f13);
            root.children.add(f2);
     
            Node result = getNode(root, "f2", "bla");
            System.out.println(result.id);
        }
     
        class Node {
            public String id;
            List<Node> children = new ArrayList<Node>();
     
            public Node(String _id) {
                id = _id;
            }
        }
     
        public Node getNode(Node parent, String parentFolderID, String name) {
            for (Object o : parent.children) {
                if (o instanceof Node) {
                    Node n = (Node) o;
                    if (n.id.equals(parentFolderID))
                        return n;
                    else if (n.children.size() != 0) {
                        Node o1 = getNode(n, parentFolderID, name);
                        if (null != o1) {
                            return o1;
                        }
                    }
                }
            }
            return null;
        }
     
        public static void main(String[] args) {
            new Rekursiv();
        }
    }
    klaus1985 bedankt sich. 
    Denken gefärdet die Gewohnheit

Ähnliche Themen

  1. xml-tag bauen
    Von P_H_I_L im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 4
    Letzter Beitrag: 31.01.08, 10:25
  2. SWT - Tree
    Von mtk-flo im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 08.12.06, 08:36
  3. Tree
    Von Albanos im Forum Hall of Fame
    Antworten: 5
    Letzter Beitrag: 26.05.06, 12:53
  4. schlüsselfertiges Bauen - Bauen aus einer Hand
    Von Ben1st im Forum Creative Lounge
    Antworten: 8
    Letzter Beitrag: 09.08.05, 19:14
  5. DLL bauen
    Von Tharmy im Forum .NET Archiv
    Antworten: 4
    Letzter Beitrag: 15.03.05, 21:41