JTree - Teil 6 - Wichtige Klassen, Interfaces und Methoden

Status
Nicht offen für weitere Antworten.
B

Beni

Gast
JTree - Teil 6 - Wichtige Klassen, Interfaces und Methoden
Dieses Kapitelchen soll einen ßberblick über verschiedene Klassen und Methoden verschaffen, welche man immerwieder antrifft, wenn man mit JTree arbeitet.

1. TreePath
Mit dem TreePath kommt man oft in Kontakt. Ein TreePath beschreibt die exakte Position eines Knotens, bzw. führt identifiziert einen Knoten eindeutig im Baum. Der TreePath ist dabei eigentlich nur ein Array von Knoten, wobei folgendes gilt:
  • Der erste Knoten des Pfades ist der Wurzelknoten (Root) des Baumes. Dieser Knoten kann über einen Aufruf von getPathComponent( 0 ) abgefragt werden.
  • Der Knoten an der Stelle x ist der Vaterknoten des Knotens an der Stelle x+1.
  • Der Knoten der vom TreePath identifiziert wird, ist an letzter Stelle. Er kann direkt mit getLastPathComponent erreicht werden.
Was sind aber diese "Knoten"-Objekte? Das sind die Objekte die das TreeModel in fast all seinen Methoden als Argument erwartet, oder als Rückgabewert angiebt.
Besondere Vorsicht muss man dabei walten lassen, wenn man die DefaultMutableTreeNodes (oder normale TreeNodes) verwendet. Denn der TreePath erwartet in diesem Fall Instancen von DefaultMutableTreeNode, und nicht die Werte der Nodes.

Weitere nützliche Dinge:
  • Die Anzahl Knoten des Pfades kann man mit getPathCount in Erfahrung bringen.
  • Will man den Pfad zum Vaterknoten des letzten Knotens haben, so kann man getParentPath benutzen.
  • Will man den Pfad um ein Element erweitern, so benutzt man pathByAddingChild
  • Ein Pfad der gar keine Knoten enthält, kann manchmal den gesammten Baum repräsentieren, ist meist jedoch schlicht und einfach falsch :wink:

Falsch zusammengebaute TreePaths welche einem JTree übergeben werden, verursachen meist keine Exceptions. Der JTree wird einfach nicht auf den Pfad reagieren...

2. TreeExpansionListener
Der TreeExpantionListener wird dem JTree direkt hinzugefügt.
Dieser Listener wird vom JTree jeweils unterrichtet, wenn der Benutzer einen Knoten aufklappt (treeExpanded) oder zuklappt (treeCollapsed). Das kann z.B. nützlich sein, wenn man eine Liste benötigt, welche Knoten denn jetzt wirklich sichtbar sind. Die Liste kann man immer dann updaten, wenn der Listener aufgerufen wird.
Die Methoden des Listeners erhalten ein TreeExpansionEvent. Dieses Event enthält den TreePath (siehe oben) zu dem Knoten, der auf-/zugeklappt wurde.

3. TreeWillExpandListener
Dieser Listener macht eigentlich genau dasselbe wie der TreeExpansionListener: er wird informiert, wenn ein Knoten geöffnet/geschlossen wird. Im Gegensatz zum TreeExpansionListener wird der TreeWillExpandListener jedoch aufgerufen, bevor das Ereignis durchgeführt wurde.
Sollte man die Aktion (das Schliessen oder ßffnen) unterbinden wollen, kann man eine ExpandVetoException werfen. Der JTree wird daraufhin alles "vergessen", was er noch tun wollte.
Code:
public class Listener implements TreeWillExpandListener{

  public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException{
     if( <gefällt mir nicht> )
       throw new ExpandVetoException( event, "Weil ich nicht will" );
  }

   ...
}

4. TreeSelectionListener
Der TreeSelectionListener wird immer dann aufgerufen, wenn die Selektion der Knoten verändert wurde.
Die einzige Methode des Listeners erhält ein Event, welches eine Liste aller neu selektierter, oder neu nicht-selektierter, Knoten enthält.
Wenn man die Selektion selbst ändern will, kann man die verschiedenen add-/removeSelectionX-Methoden des JTrees verwenden.
Um die Selektionen abzurufen, verwendet man die getSelectionXXX-Methoden.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben