JTree - TreePath - TreeNode: Unterschied zwischen den Versionen
K |
K (→TreePath erzeugen) |
||
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Swing]] | [[Kategorie:Swing]] | ||
− | [[Kategorie:Codeschnipsel]] | + | [[Kategorie:Java-Codeschnipsel]] |
Bei der Arbeit mit {{JAPI|JTree}} und {{JAPI|TreeModel}} kommt man zwangsläufig mit der [[Klasse]] {{JAPI|TreePath}} in Berührung. Doch, was ist TreePath? Wie kann er erzeugt bzw. aufgebaut werden? | Bei der Arbeit mit {{JAPI|JTree}} und {{JAPI|TreeModel}} kommt man zwangsläufig mit der [[Klasse]] {{JAPI|TreePath}} in Berührung. Doch, was ist TreePath? Wie kann er erzeugt bzw. aufgebaut werden? | ||
Zeile 6: | Zeile 6: | ||
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. | 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 | + | TreePath ist nun eine Repräsentation des direkten Pfades, den die Ameise ausgehend von ihrem Blatt des Baums bis zur Wurzel entlang laufen muss, um zu ihrer Königin zu gelangen. |
− | Mit anderen Worten, stellt TreePath ein [[Array]] von [[Objekt|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. | + | Mit anderen Worten und auf den JTree übertragen, stellt TreePath ein [[Array]] von [[Objekt|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 ''(Index 0)'' 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/zweig/blatt''' kann durch | + | Beispielsweise wird eine Datei im Dateisystem anhand des Arrays der übergeordneten Verzeichnisse und des Dateinamens eindeutig identifiziert. Der Pfad '''/wurzel/stamm/ast/zweig/blatt''' kann durch ein TreePath-Objekt dargestellt werden <code>new Object[]{"wurzel", "stamm", "ast", "zweig", "blatt"})</code>. |
TreePath wird von JTree und verwandten Klassen umfassend verwendet. Beispielsweise repräsentiert JTree die Auswahl als Array von TreePaths. Wenn JTree mit {{JAPI|DefaultTreeModel}} gekoppelt ist, sind die Elemente des Pfads {{JAPI|TreeNodes}}. | TreePath wird von JTree und verwandten Klassen umfassend verwendet. Beispielsweise repräsentiert JTree die Auswahl als Array von TreePaths. Wenn JTree mit {{JAPI|DefaultTreeModel}} gekoppelt ist, sind die Elemente des Pfads {{JAPI|TreeNodes}}. | ||
=TreePath erzeugen= | =TreePath erzeugen= | ||
− | Die | + | Der JTree bietet mit der Methode <code>getSelectionPath()</code> bereits eine Möglichkeit an, den TreePath des gerade selektierten Knotens zu erhalten. Wenn das TreeModel den TreePath aber selbst ermitteln will/muss, kann es auch die TreeNodes durchlaufen und so den "Weg" von einem Knoten zur Wurzel des Baumes aufzeichnen. |
+ | |||
+ | Die folgende getTreePath()-[[Methode]] könnte in einem realen TreeModel-Typ implementiert sein. Sie kann dazu dienen, ein TreePath-Objekt für die Übergabe an die {{JAPI|TreeModelEvent}} verarbeitenden '''fireTreeXXX()'''-Methoden zu erzeugen. | ||
==TreePath aus einem TreeNode erzeugen== | ==TreePath aus einem TreeNode erzeugen== | ||
Zeile 29: | Zeile 31: | ||
List<Object> nodes = new ArrayList<>(); | List<Object> nodes = new ArrayList<>(); | ||
do { | do { | ||
− | nodes.add(treeNode); | + | nodes.add(0, treeNode); |
} | } | ||
while ((treeNode = treeNode.getParent()) != null); | while ((treeNode = treeNode.getParent()) != null); | ||
− | |||
− | |||
return nodes.isEmpty() ? null : new TreePath(nodes.toArray()); | return nodes.isEmpty() ? null : new TreePath(nodes.toArray()); | ||
Zeile 39: | Zeile 39: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | =Siehe auch= |
− | + | *[[JTree (Tutorial)©]] | |
− | + | *[[Ein eigenes TreeModel schreiben]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Aktuelle Version vom 31. Januar 2022, 17:05 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?
Inhaltsverzeichnis
Was ist ein 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 entlang laufen muss, um zu ihrer Königin zu gelangen.
Mit anderen Worten und auf den JTree übertragen, 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 (Index 0) 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/zweig/blatt kann durch ein TreePath-Objekt dargestellt werden new Object[]{"wurzel", "stamm", "ast", "zweig", "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
Der JTree bietet mit der Methode getSelectionPath()
bereits eine Möglichkeit an, den TreePath des gerade selektierten Knotens zu erhalten. Wenn das TreeModel den TreePath aber selbst ermitteln will/muss, kann es auch die TreeNodes durchlaufen und so den "Weg" von einem Knoten zur Wurzel des Baumes aufzeichnen.
Die folgende getTreePath()-Methode könnte in einem realen TreeModel-Typ implementiert sein. Sie kann dazu dienen, ein TreePath-Objekt für die Übergabe an die TreeModelEvent
verarbeitenden fireTreeXXX()-Methoden zu 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(0, treeNode);
}
while ((treeNode = treeNode.getParent()) != null);
return nodes.isEmpty() ? null : new TreePath(nodes.toArray());
}