Mittwoch, 5. Dezember 2012

Eclipse RCP / SWT - TreeViewer Sortierreihenfolge Teil 1

Eclipse 3.7

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