2009-11-26 12 views
5

Offenbar, wenn ILazyTree(TreePath)ContentProvider verwendet wird Sortierung und Filterung wird von TreeViewers nicht unterstützt. Die Einstellung von ViewerFilters oder Sorters/Comparators zu Ihrem TreeView wird also nichts nützen. Vielleicht hängt das damit zusammen, dass man nicht alle Elemente kennt, einschließlich derer, die im Moment nicht sichtbar sind.Gibt es eine bessere Möglichkeit zur Sortierung und Filterung mit ILazyTreeContentProvider

Zur Untermauerung dieser Aussage hier ist javadoc Auszug aus org.eclipse.jface.viewers.TreeViewer Klasse:

Wenn der Content-Provider ein ILazyTreeContentProvider oder ein ILazyTreePathContentProvider ist, muss der zugrunde liegenden Baum sein erstellt mit der {@link SWT # VIRTUAL} style bit, der Tree Viewer unterstützt nicht Sortierung oder Filterung, und Hash-Lookup muss durch Aufruf von {@link #setUseHashlookup (boolean)} aktiviert werden.

Die einzige Lösung, die ich im Moment sehe, ist, die Kinder für jeden bereits bestellten Knoten zu bekommen. Wenn Sie eine dynamische Sortierung benötigen, d. H. Während der Laufzeit die Sortierreihenfolge in desc- oder asc-Reihenfolge wechseln können, müssen Sie eine eigene Lösung dafür finden, indem Sie beispielsweise beim Füllen und Aktualisieren von untergeordneten Elementen ein boolesches Flag überwachen.

Kennen Sie möglicherweise bessere Lösungen, vielleicht mehr jface API beteiligt?

Antwort

6

Tatsächlich ist Sortierung nicht möglich, dass ein VIRTUAL-TreeViewer, ob Sie eine IStructuredContentProvider oder einen faulen man verwenden, wie in this thread bemerkt:

Sie die Sortierung selbst zu tun haben (im Modell).
Die zugrunde liegende Annahme ist, dass die Elemente möglicherweise nicht einmal im Speicher sind.

Dinge können change in e4 (von dieser Nachricht im Juni 2009):

IMHO die JFace Virtual Table und Tree Implementierung als keine nicht so gut ist virtuell - auch ich bleibe weg von ihm und benutze es in keinem meiner Projekte.

[...] es ist sinnlos, virtuelle Tabellen zu haben, weil es aus der Sicht des UI-Designs sinnlos ist, einem Benutzer 10.000 Elemente zu zeigen, und noch wichtiger, weil das Modell in Ihrem Speicher resident bleibt Tabellen mit JFace könnte essen all Ihre heapspace
(Wir hoffen, mit einem neu gestalteten Satz von Viewern in E4, die solche Probleme beheben).
Siehe this project und bug 260451.
(mehr genral Bugs: 167436 und 262160)

Gerade jetzt:

wir im Betrachter einen starken Bezug zu schaffen, nachdem die Tabelle es angefordert.

IMHO seine viel besser um den Benutzer zu geben: - Paging - intelligente Filtermöglichkeiten

statt Millionen von Ergebnissen zeigt und dann z.B. Im Fall von CDO (Connected Data Objects) geschieht die Filterung auf dem Server mit ihrer neuen Abfrage-API.

+1

Ich sehe, so kommt direkt von der Quelle - "Sie müssen die Sortierung selbst (in Ihrem Modell) tun". Danke, dass du das von VonC! Zurück zur Implementierung eigener Sortierfunktionen ... – Svilen

Verwandte Themen