Preference Pages

Aus Eclipse
Wechseln zu: Navigation, Suche

Allgemeines

Viele Eclipse-Plug-Ins stellen dem Benutzer Möglichkeiten zum Setzen von persistenten Einstellungen zur Verfügung. Diese Einstellungen verändern das Startverhalten der Plug-Ins und beeinflussen die Darstellungsform der angezeigten Informationen. Mit dem Preference-Framework können Seiten dargestellt werden, auf denen der Benutzer die Einstellungen vornehmen kann. Diese Einstellungen werden gespeichert und bleiben dauerhaft erhalten.


Beispiel für einen Preferences-Dialog:

Der Preferences-Dialog befindet sich im Hauptmenü: Window > Preferences
Das Preference "Preferences Example" wurde wie nachfolgend beschrieben dem Dialog hinzugefügt.

Eine Preference Page erstellen

Eclipse bietet zur Erstellung einer Preference Page einen eigenen Wizard an:

Reiter Extension wählen und Add...-Button anklicken. org.eclipse.ui.preferencePages auswählen und Preference List markieren. Mit Next bestätigen, Page Class Name und Page Name eingeben und mit Finish bestätigen.

Anpassung der Eigenschaften:

Anpassen der Eigenschaften: id = eindeutiger Name zur Identifikation, name = sinnvoller Name, erscheint in der Prefernce-Page-Hierarchie auf der linken seite im Workbench-Preferences-Dialog, class = voller Name der Klasse, die das PreferencePage-Interfae implementiert, category = optionales Attribut zur hierarchischen Gruppierung der pages

Preference Page APIs

Der Wizard hat den folgenden Aufbau generiert:

Deklaration, Klassen und Präsentation der Preference-Page

Jede Preference-Page muss das org.eclipse.ui.IWorkbenchPreferencePage Interface implementieren. Weiters müssen die abstrakten Klassen org.eclipse.jface.preference.PreferencePage und org.eclipse.jface.preference.FieldEditorPreferencePage implementiert werden. Damit wird bereits ein Großteil der Preference-Page-Infrastruktur abgedeckt.

Der Wizard hat zur Klasse FavoritesPreferencePage 2 weitere Klassen erstellt: PreferenceConstants und PreferenceInitializer. Diese Klassen werden weiter unten vorgestellt.

FieldEditorPreferencePage

Die Preference-Page erweitert die Klasse org.eclipse.jface.preference.FieldEditorPreferencePage, die, gemeinsam mit verschiedenen Editor-Klassen im org.eclipse.jface.preference.* Package, einen schnellen und einfachen Weg zur Präsentation und Erstellung einfacher Preferences bietet.

Subklassen von FieldEditorPreferencePage müssen lediglich die Methoden createFieldEdiotrs() und init() implementieren um eine einfache Preference-Page anzuzeigen:

addField(FieldEditor)
Methode, die der Page ein Feld hinzufügt. Wird von der Methode createFieldEditors() aufgerufen.

checkState()
Wird von FieldEditorPreferencePage aufgerufen. Dadurch wird der Inhalt der Page überprüft: Die Inhalte der Felder werden einzelnen abgefragt und setValid() wird aufgerufen. Um zusätzliche Überprüfungsmöglichkeiten zu schaffen, kann diese Methode überschrieben werden.

createContents(Composite)
Erstellt den Composite, in welchem die Felder des Editors erscheinen. Üblicherweise überschreiben die Subklassen die Methode createFieldEditors().

createFieldEditors()
Erstellt die Feld-Editoren, die in der Preference-Page erscheinen. Für jedes Feld sollten die Subklassen getFieldEditorParent() und addField() aufrufen. Das Parent, das von getFieldEditorParent() zurückgegeben wird, sollte dabei nur für einen Editor verwendet werden, da sich das Parent möglicherweise verändern könnte (abhängig vom Layout-Style der Page).

dispose()
Gibt alle Ressourcen, die von der Page erstellt/beansprucht wurden, wieder frei. Üblicherweise ist es nicht sinnvoll diese Methode zu überschreiben.

getFieldEditorParent()
Gibt das Parent des Field-Editors zurück.

initialize()
Wird von createContents() aufgerufen, nachdem die Felder erstellt wurden. Zweck ist eine Initialisierung der Feld-Inhalte. Normalerweise ist es nicht sinnvoll diese Methode zu überschreiben, da FieldEditorPreferencePage jedes Feld selbständig initialisiert.

performDefaults()
Lädt alle Default-Werte und schreibt diese in die entsprechenden Felder. Dies geschieht automatisch durch FieldEditorPreferencePage - daher besteht keine Notwendigkeit diese Methode zu überschreiben.

performOK()
Speichert die Inhalte aller Felder im Preference-Store. Auch dies geschieht automatisch durch FieldEditorPreferencePage.

setValid(boolean)
Validiert den Inhalt der Preference Page:

true: Inhalt der Preference Page ist korrekt false: Inhalt der Preference Page ist nicht korrekt

setVisible(boolean)
Wird aufgerufen, um die Page anzuzeigen bzw. zu verstecken.

Field Editor

Ein Field Editor ist für das laden, anzeigen, verändern und speichern von Preference-Settings verantwortlich. Das org.eclipse.jface.preference-Paket stellt viele verschiedene Feld Editoren zur Verfügung. Einige davon beinhalten eine einzige Kontrolle, andere mehrere. Die Superklasse aller Editoren ist FieldEditor. Der übliche Weg um Zugang zu den Editoren zu erlangen ist FieldEditorPreferencePage.

Hier eine Liste von Feld Editoren aus dem org.eclipse.jface.preference-Paket:

BooleanFieldEditor:
True/False-Checkbox
ColorFieldEditor:
Label mit Button zur Auswahl einer Farbe


DirectoryFieldEditor:
Ein Label mit Textfeld und Button zur Auswahl eines Verzeichnisses

FileFieldEditor:
Ein Label mit Textfeld und Button zur Auswahl eines Files


FontFieldEditor:
Ein Label zur Anzeige des Font-Namens und ein Button um die Font zu wechseln


IntegerFieldEditor:
Ein Label mit Textfeld - zur Eingabe eines Integerwerts


PathEditor:
Ein Label zur Anzeige der Pfade und die Buttons New, Remove, Up und Down


RadioGroupFieldEditor:
Ein Label mit mehreren Radiobuttons zur Auswahl


ScaleFieldEditor:
Ein Label und ein Schieber (Integerbereich)


StringFieldEditor:
Label mit Textfeld zur Eingabe eines Stringwerts


PreferencePage

Für einfache Preference Pages ist die FieldEditorPreferencePage-Klasse die beste Wahl. Alle Preferences der Seite sind Feld-Editoren und kümmern sich um das Laden, Überprüfen und Speichern der Feldinhalte.

Für komplexere Preference Pages kommt die Klasse PreferencePage zum Einsatz. PreferencePage ist die Superklasse von FieldEditorPreferencePage. Der Nachteil ist, dass hier mehr Arbeit beim Erstellen der Preference Page anfällt. Zwar können die verschiedenen Feld-Editoren immer noch benützt werden, allerdings muss das Laden, Überprüfen und Speichern der Feldinhalte selbst geschrieben werden:

Laden:

protected Control createContents(Composite parent) {
   ...
   editor = new BooleanFieldEditor("boolean", "Boolean", parent);
   editor.setPreferencePage(this);
   editor.setPreferenceStore(getPrferenceStore());
   editor.load();
   ...
}

Überprüfen:

protected void performDefaults() {
   editor.loadDefault();
   ...
   super.performDefaults();
}

Speichern:

public boolean performOk() {
   ...
   editor.store();
   return true;
}