Problem: Knoten im TreeViewer sollen sortiert werden.
Lösung: Der ViewSorter erledigt die Sortierung. In unserem Beispiel werden die Knoten alphabetisch sortiert. Im ersten Teil dieses Artikels wird ein Beispiel vorbereitet. Im zweiten die Sortierung hinzugefügt.
Schritt 1: Erstelle die einfache TreeViewer Anwendung aus diesem Blog.
Schritt 2: Im zweiten Schritt wird das Modell der Knoten etwas abgeändert, damit eine Sortierung später nötig wird. Dazu wird der Klasse
MyTreeNode
ein Attribut prefix
hinzugefügt, welches im Konstruktor initialisiert wird.
public class MyTreeNode {
private int depth;
private MyTreeNode parent = null;
private ArrayList children;
private String prefix; // neues Attribut
//Übergabeparameter an den Konstruktor werden geändert
public MyTreeNode(int depth, String prefix) {
children = new ArrayList();
this.prefix = prefix; // Initialisierung
this.depth = depth;
}
...
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append(prefix + " Knoten mit Tiefe ");
sb.append(String.valueOf(depth));
return sb.toString();
}
...
}
Schritt 3: Im letzten Schritt wird an allen Stellen, an denen der Konstruktor aufgerufen wird der zweite Übergabeparameter mit einem willkürlichem String
gefüllt. Dazu wird in der Klasse TreeContentProvider
die Methode createChildNodes(Object parent)
wie folgt geändert.
public class TreeContentProvider implements ITreeContentProvider {
...
public void createChildNodes(Object parent) {
if (parent instanceof MyTreeNode) {
MyTreeNode node = (MyTreeNode)parent;
node.addChild(new MyTreeNode(node.getDepth() + 1, "1")); // zweiter
node.addChild(new MyTreeNode(node.getDepth() + 1, "5")); // Parameter
node.addChild(new MyTreeNode(node.getDepth() + 1, "3")); // mit beliebigen
node.addChild(new MyTreeNode(node.getDepth() + 1, "z")); // Werten
}
}
}
und zuletzt in der View
Klasse die Methode createPartControl
wie folgt geändert:
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL);
viewer.setContentProvider(new TreeContentProvider());
viewer.setInput(new MyTreeNode(0,"")); // hier ebenfalls aktualisiert
}
Keine Kommentare:
Kommentar veröffentlichen