[SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen

chalkbag

Bekanntes Mitglied
Hallo Community,

ich verwende momentan eine SWT widgets Table (siehe org.eclipse.swt.widgets.Table)
Diese Tabelle kann ich durch klicken auf die Überschrift asc/dsc sortieren.

Zum sortieren nutze ich folgende Referenzsortierung
(siehe [Eclipse_Project] Contents of /org.eclipse.jface.snippets/Eclipse JFace Snippets/org/eclipse/jface/snippets/viewers/Snippet040TableViewerSorting.java )

Die Sortierung baut auf eine eigene Datenstruktur auf und sieht z.b. wie folgt aus

Java:
ColumnSorter cSorter = new ColumnSorter(tableViewer, column) {
					protected int doCompare(Viewer v, Object e1, Object e2) {
						ITableLabelProvider lp = ((ITableLabelProvider) tableViewer.getLabelProvider());
						String t1 = lp.getColumnText(e1, colIdx);
						String t2 = lp.getColumnText(e2, colIdx);
						return t1.compareTo(t2);
					}
				};

Also ein typischer Compare mit einer Datenstruktur wie folgt als Basis.


Java:
class ComponentXY () {
  String name;
  String text;
....
}

Sortieren funktioniert {check}

Problem, diese Methode soritert wohl nur die Werte um, und zeichnet die Zeilen neu.

Leider färbe ich beim Import zuvor mittels

Java:
Table.getItem(i).setBackground(4,colorNew);

einzelne Cellen ein. Diese Information ist nach der Sortierung verloren. Nun müsste ich meine Routine (welche mit einem DB-Abgleich etwas aufwändiger ist) nochmals über die Tabelle schicken.

Eigentliche Frage, kann ich eine widgets.Tabelle irgendwie sortieren, so das die optischen Attribute berücksichtigt werden (d.h. Cell.Background)?

Ich hoffe es war verständlich.

Grüße

Staubbeutel
 
Hallo SirWayne,

schonmal danke für deine Hilfe, hat mir sehr geholfen.

Ich muss also den Provider anpassen.

Ich verwendet jetzt anstatt eines LabelProvider (für getText, ) den ColumnLabelProvider (getBackground).

Java:
class TableLabelProviderImport extends ColumnLabelProvider implements ITableLabelProvider 
.. getText(...)...
.. getBackground(...)...
...


Mit diesem ist es mir möglich, einzeln Zeilen einzufärben.

Ich werd noch weiter suchen, aber du weißt nicht rein zufällig welcher Provider mir bei einer Zelle helfen könnte, mit LabelDecorator hatte ich keinen Erfolg.

Dank dir nochmal.
 
ah nach längerem gruscheln die richtigen gefunden.

Java:
	class TableLabelProviderImport extends BaseLabelProvider implements ITableLabelProvider, ITableColorProvider {
		
		public String getColumnText(Object element, int columnIndex) {
			...
		}

		public Color getBackground(Object o, int arg1) {
			...
		}
 

Zurück
Oben