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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen snippet zeigt Ihrem Thema gemacht haben würde, dies zu erleichtern.
Alles, was Sie tun müssen, um dies zu beheben, ist stellen Ihren Hörer den code in ein asyncExec block, zu dessen Ausführung aufzuschieben. (Ich habe ein deja-vu, denn ich antwortete auf eine andere Frage mit dem gleichen Tipp vor kurzem...)
BTW: Sie haben nicht nennen TreeItem.setExpanded(.). Auch, nicht Boolean verwenden, wenn Sie einen primitiven Typ. Es funktioniert, aber der VM hat auto-Boxen die ganze Zeit, das ist nicht gut für die Leistung. Das spielt keine Rolle hier, aber es ist ein schlechtes Verhalten zeigen. Und dann: Unterstrich Suffixe für Variablen?
Nun die arbeiten snippet, übernommen und angepasst von hier: