Sonntag, 8. Mai 2011

TreeViewer - Methoden des ITreeContentProvider

Um einen einfachen TreeViewer anzuzeigen benötigt der TreeViewer einen Provider (von Typ IContentProvider) der den Inhalt des Trees zur Verfügung stellt. Im folgenden Abschnitt werden die wichigsten Methoden und deren Reihenfolge erläutert.

Die unten genannten Methoden des Interface IContentProvider müssen implementiert werden.



  • public Object[] getChildren(Object arg0) 
  • public Object getParent(Object arg0) 
  • public boolean hasChildren(Object arg0) 
  • public Object[] getElements(Object arg0) 
  • public void dispose() 
  • public void inputChanged(Viewer arg0, Object arg1, Object arg2) 

public Object[] getChildren(Object arg0) 

Gibt in Abhängigkeit vom Knoten arg0 die Kinderknoten in einem Array wieder. Wenn der Knoten arg0 keine Kinderknoten besitzt (und somit Blatt ist), dann muss diese Methode ein leeres Array zurückgeben. Ein null führt zu einer Exception. 

public Object getParent(Object element)

Die getParent Methode gibt den Elternknoten des element Objektes wieder. 

Die getElements Methode hat die Aufgabe die Root Knoten des Baumes wiederzugeben.


public boolean hasChildren(Object element)

Die hasChildren Methode zeigt an ob das element Objekt noch Kinderknoten besitzt.


public void dispose() 

Die dispose Methode ist für alle notwendigen Aufräumarbeiten zuständig, wenn das IContentProvider Objekt dereferenziert wird.


public void inputChanged() 

Die inputChanged Methode wird aufgerufen, sobald sich der Input des IContantProvider geändert hat.

Ein einfaches Beispiel TreeViewer findet Ihr hier im Blog.

... Fortsetzung Folgt!

TreeViewer - Knoten per Doppelklick öffnen

Um bei einem TreeViewer die Baumknoten per Doppelklick zu öffnen, muss dem TreeViewer ein OpenListener hinzugefügt werden. Hier der Beispielcode von der Seite EclipseZone. Dieser hat in meinem Code auf Anhieb funktioniert.


// tv ist ein TreeViewer Objekt
tv.addOpenListener(new IOpenListener() {
  public void open(final OpenEvent event) {
Object firstElement = ((IStructuredSelection) event
.getSelection()).getFirstElement();
if (tv.getExpandedState(firstElement)) {
tv.collapseToLevel(firstElement,
AbstractTreeViewer.ALL_LEVELS);
} else {
tv.expandToLevel(firstElement, 1);
}
}
});