Training „git“
07.10.2010 - 08.10.2010, Essen
Training „Eclipse RCP“
28.03.2011 - 01.04.2011, Dortmund
Eclipse RCP

JFace ResourceManager, ControlDecoration und Field Assist

ResourceManager

Wie wir im Kapitel “SWT Interna” gesehen haben, müssen SWT-Objekte durch den Aufruf von dispose wieder freigegeben werden, wenn sie nicht mehr benötigt werden. JFace stellt für Color, Font und Image-Objekte den LocalResourceManager bereit, der diese Objekte verwaltet und automatisch freigibt, wenn ein Besitzer-Widget freigegeben wird:

LocalResourceManager resources 
    = new LocalResourceManager(JFaceResources.getResources(), ownerWidget);

ResourceManager funktionieren hierarchisch, das erste Argument des Konstruktors ist der Eltern-ResourceManager. Alle Ressourcen in diesem stehen auch dem erzeugten ResourceManager zur Verfügung. JFaceResources.getResources() stellt einige Standard-Ressourcen bereit.

Hat man einen ResourceManager erzeugt, kann man diesen zur Erzeugung von Farben, Fonts und Bildern verwenden, die automatisch verwaltet und freigegeben werden:

Color color = resources.createColor(new RGB(200, 100, 0));
Font font = resources.createFont(FontDescriptor.createFrom("Arial", 10, SWT.BOLD));
Image image = resources.createImage(Activator.getImageDescriptor("/icons/someimage.png"));

SWT Controls dekorieren

Mit der JFace-Klasse ControlDecoration können SWT-Controls mit einem Symbol versehen werden:

ControlDecoration

Die Dekoration erfolgt dabei um das eigentliche Control herum und ist unabhängig vom jeweiligen Layout. Man sollte lediglich sicherstellen, dass genügend Platz zur Anzeige des Symbols zur Verfügung steht. Erzeugt wird eine Dekoration mit:

ControlDecoration decoration = new ControlDecoration(control, SWT.RIGHT | SWT.TOP);

Standard-Symbole für Fehler oder Warnungen werden von FieldDecorationRegistry zur Verfügung gestellt:

Image errorImage = FieldDecorationRegistry.getDefault()
        .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage();
decoration.setImage(errorImage);

Folgende Konstanten können verwendet werden:

Optional kann ein beschreibender Text eingeblendet werden, sobald der Benutzer mit der Maus über das Symbol fährt:

decoration.setDescriptionText("Required field");
decoration.setShowHover(true);

Mit den Methoden show und hide kann die Dekoration ein- oder ausgeblendet werden:

decoration.show();
decoration.hide();

Eingabe-Vervollständigung mit JFace FieldAssist

JFace stellt eine komfortable Möglichkeit bereit, Eingaben in Textfeldern automatisch zu vervollständigen:

JFace Field Assist

Um die Vervollständig zu aktivieren, ist eine Instanz von AutoCompleteField mit einem bestehendem Text-Feld und einer Liste aller Vorschläge zu erzeugen:

String[] cities = new String[] { "Aachen", "Berlin", "Bremen", "Bochum" };
new AutoCompleteField(textControl, new TextContentAdapter(), cities);

Im obigen Beispiel wurde zusätzlich eine ControlDecoration mit DEC_CONTENT_PROPOSAL für das Textfeld erzeugt, um den Anwender auf die Möglichkeit der Eingabevervollständigung hinzuweisen.

Patrick, 15. Juli, 16:12 Uhr

Hallo! Sehr gute und informative Seite. :-)

Gibt es eigentlich eine Möglichkeit den Tooltip Text, der ControlDecoration anzuzeigen, wenn das dekorierte Textfeld den Fokus hat? Ohne mit der Maus darüber zu hovern?

Gruß
Patrick

Über Ihre Kommentare und Hinweise freue ich mich sehr:
Ralf Ebert | Eclipse RCP Buch | JFace ResourceManager, ControlDecoration und Field Assist