JTree - TreePath - TreeNode: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (TreePath aus einem TreeNode erzeugen)
K (TreePath aus einem benutzerdefinierten Collection-Typ erzeugen)
Zeile 38: Zeile 38:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==TreePath aus einem benutzerdefinierten Collection-Typ erzeugen==
+
==TreePath aus einem benutzerdefinierten Datentyp erzeugen==
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
 
     /**
 
     /**
     * Erzeugt aus dem übergebenen Collection-Typ ein TreePath-Objekt.
+
     * Erzeugt aus dem übergebenen Datentyp ein TreePath-Objekt.
 
     *
 
     *
 
     * @param node das Element, von dem aus ein Pfad bis zum Wurzelknoten
 
     * @param node das Element, von dem aus ein Pfad bis zum Wurzelknoten

Version vom 11. Februar 2019, 14:41 Uhr

Bei der Arbeit mit JTree und TreeModel kommt man zwangsläufig mit der Klasse TreePath in Berührung. Doch, was ist TreePath? Wie kann er erzeugt bzw. aufgebaut werden?

Was ist der TreePath?

Stellen wir uns eine Ameise vor, die auf einem Blatt einer Linde sitzt und den Morgentau einsammelt. Die Ameise möchte gerne ihrer Königin, die an der Wurzel des Baumes lebt, den Tau bringen.

TreePath ist nun eine Repräsentation des direkten Pfades, den die Ameise ausgehend von ihrem Blatt des Baums bis zur Wurzel beschreiten muss, um zu ihrer Königin zu gelangen.

Mit anderen Worten, stellt TreePath ein Array von Objekten dar, die den Pfad zu einem Knoten in einer Baumstruktur eindeutig identifizieren. Die Elemente des Arrays sind so angeordnet, dass die Wurzel das erste Element des Arrays ist.

Beispielsweise wird eine Datei im Dateisystem anhand des Arrays der übergeordneten Verzeichnisse und des Dateinamens eindeutig identifiziert. Der Pfad /wurzel/stamm/ast/blatt kann durch einen TreePath-Objekt dargestellt werden new Object[]{"wurzel", "stamm", "ast", "blatt"}).

TreePath wird von JTree und verwandten Klassen umfassend verwendet. Beispielsweise repräsentiert JTree die Auswahl als Array von TreePaths. Wenn JTree mit DefaultTreeModel gekoppelt ist, sind die Elemente des Pfads TreeNodes.

TreePath erzeugen

TreePath aus einem TreeNode erzeugen

    /**
     * Erzeugt aus dem übergebenen TreeNode ein TreePath-Objekt.
     *
     * @param treeNode der TreeNode, von dem aus ein Pfad bis zum Wurzelknoten
     * erzeugt werden soll
     * @return das erzeugte TreePath-Objekt
     */
    public TreePath getTreePath(TreeNode treeNode) {
       List<Object> nodes = new ArrayList<>();
       do {
          nodes.add(treeNode);
       }
       while ((treeNode = treeNode.getParent()) != null);

       Collections.reverse(nodes);

       return nodes.isEmpty() ? null : new TreePath(nodes.toArray());
    }

TreePath aus einem benutzerdefinierten Datentyp erzeugen

    /**
     * Erzeugt aus dem übergebenen Datentyp ein TreePath-Objekt.
     *
     * @param node das Element, von dem aus ein Pfad bis zum Wurzelknoten
     * erzeugt werden soll
     * @return das erzeugte TreePath-Objekt
     */
    public TreePath getTreePath(Object node) {
        List<Object> nodes = new ArrayList<>();
        Category category = (Category) node;

        do {
            nodes.add(category);
        } while ((category = category.getParent()) != null);

        Collections.reverse(nodes);

        return nodes.isEmpty() ? null : new TreePath(nodes.toArray());
    }