2010-12-12 6 views
3

Wir haben eine Swing-Anwendung, die wir auf SWT/JFace portieren wollen. Die Swing-Anwendung zeichnet viele Symbole (javax.swing.Icon Implementierungen) in Bäumen und Tabellen (Symbol links neben dem Text). Wenn ich es richtig verstanden habe, kann SWT nur Bilder zeichnen (aka Grafikdateien). Was wäre die einfachste Lösung, um das Symbol oder die gesamte Tabelle/Baumzelle zu malen? Danke im Voraus.SWT: Zeichnen "Icons" in Tabelle oder Baumzellen

Antwort

3

Bilder können aus Grafikdateien geladen werden, oder sie können im Speicher gezeichnet werden.

Image image = new Image(Display.getCurrent(), width, height); 
GC gc = new GC(image); 

// draw icon using GC 

gc.dispose(); 

Soweit sie in Tabellen/Bäume anzeigt, der direkteste Ansatz ist das Bild auf dem Tisch/Baumeintrag einzustellen:

TableItem item = ... 
item.setImage(theImage); 

Es gibt einen erheblichen Nachteil dieses Ansatzes jedoch: Unter Windows wird beim erstmaligen Festlegen eines Bilds auf einem Tabellenelement die Höhe dieses Bildes zur Standardhöhe für alle Elemente in der Tabelle. Wenn Sie also ein größeres Bild einstellen, wird es auf die erste Bildgröße verkleinert. Wenn Sie ein kleineres Bild einstellen, wird es vergrößert.

Wenn alle Ihre Bilder die gleiche Größe haben, ist dies kein Problem.

Wenn Sie jedoch die Größe der Bilder nicht im Voraus vorhersagen können, empfehle ich die custom draw API, um Ihre Tabelle/Baum-Elemente zu rendern. Dieser Ansatz ist definitiv intensiver, bietet Ihnen aber eine feinere Kontrolle über das Ergebnis.

+0

Vielen Dank. Gibt es einen Ort, an dem das Bild unmittelbar vor dem Zeichnen des Knotens auf Anforderung gesetzt werden kann? – Mot

+1

Sie können eine SWT.VIRTUAL-Tabelle verwenden und mithilfe eines SWT.SetData-Listeners das Bild und den Text nach Bedarf festlegen. – qualidafial