Auto-resize Spalten, wenn Elemente erweitern

In einem Baum mit mehreren Spalten, wie kann ich die Größe von Spalten anzupassen, um Inhalt auf erweitern/reduzieren, und Daten-updates?

Die Lösung der ähnlichen Frage für Tabellen nicht funktioniert.

Gleiche wie:

  tree.addListener(SWT.Collapse, new Listener(){
   @Override
   public void handleEvent(Event e) {
    expandAndResize(false, (TreeItem) e.item);
   }
  });

  tree.addListener(SWT.Expand, new Listener() {
   @Override
   public void handleEvent(Event event) {
    expandAndResize(false, (TreeItem) event.item);
   }
  });

 private static void expandAndResize(Boolean expand_, TreeItem item_)
 {
  System.out.println( (expand_?"Expanding":"Collapsing") + "item={" + item_ + "}");
  item_.setExpanded(expand_);
  System.out.println(" Resizing columns");
  resizeTree(item_.getParent());
 }

 private static void resizeTree(Tree tree_)
 {
  for (TreeColumn tc: tree_.getColumns())
   resizeTreeColumn(tc);
 }

 private static void resizeTreeColumn(TreeColumn treeColumn_)
 {
  treeColumn_.pack();  
 }

Dies funktioniert für updates der Daten (durch den Aufruf der resizeTree), aber für expandiert/kollabiert ist es ein Schritt zurück!

Genauer gesagt, wenn ich erweitern Sie ein Element in der ersten Spalte, und die zugrunde liegende Element ist länger als die Spaltenbreite, die Größe, die Breite getan werden bei einem nächsten Zusammenbruch oder zu erweitern einige andere Element (oder wenn ich direkt anrufen resizeTree).

Nur, falls es wichtig ist: die Daten, die gegeben ist durch TreeContentProvider und ITableLabelProvider, und meine Vermutung ist, dass ITableLabelProvider könnte das problem verursachen (die Breite der Spalte anpassen, bevor das label generiert wird?!)

X-posted to Eclipse-Community-Forum

InformationsquelleAutor MadH | 2010-07-07
Schreibe einen Kommentar