Das JFace-Plug-in stellt ein Framework für die Implementierung von Assistenten, Benutzervorgabenseiten und Dialogen zur Verfügung. Die Implementierung für diese Dialoge folgt einem einheitlichen Muster. Der Inhalt einer Seite oder eines Dialogs wird definiert durch die Implementierung einer createContents-Methode, die die SWT-Steuerelemente erstellt, mit denen der Seiteninhalt dargestellt wird. Diese Methode sollte auch Listener-Funktionen für alle Ereignisse von Interesse hinzufügen. Die Seite ist für die Erstellung und Rückgabe des kombinierten Steuerelements zuständig, das das übergeordnete Element aller Steuerelemente auf der Seite ist. Der folgende Ausschnitt zeigt die Highlights:
protected Control createContents(Composite parent) { ... //composite_textField << parent Composite composite_textField = createComposite(parent, 2); Label label_textField = createLabel(composite_textField, MessageUtil.getString("Text_Field")); textField = createTextField(composite_textField); pushButton_textField = createPushButton(composite_textField, MessageUtil.getString("Change")); //composite_tab << parent Composite composite_tab = createComposite(parent, 2); Label label1 = createLabel(composite_tab, MessageUtil.getString("Radio_Button_Options")); // tabForward(composite_tab); //radio button composite << tab composite Composite composite_radioButton = createComposite(composite_tab, 1); radioButton1 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_1")); radioButton2 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_2")); radioButton3 = createRadioButton(composite_radioButton, MessageUtil.getString("Radio_button_3")); //composite_tab2 << parent Composite composite_tab2 = createComposite(parent, 2); Label label2 = createLabel(composite_tab2, MessageUtil.getString("Check_Box_Options")); //$NON-NLS-1$ // tabForward(composite_tab2); //composite_checkBox << composite_tab2 Composite composite_checkBox = createComposite(composite_tab2, 1); checkBox1 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_1")); checkBox2 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_2")); checkBox3 = createCheckBox(composite_checkBox, MessageUtil.getString("Check_box_3")); initializeValues(); return new Composite(parent, SWT.NULL); }
Der größte Teil des Codes in dieser Methode dient der Erstellung und Anordnung der Steuerelemente und soll daher an dieser Stelle nicht näher behandelt werden. Die entsprechende Seite für diesen Code sieht folgendermaßen aus:
Eine weitere wichtige Aufgabe einer Benutzervorgabenseite ist die Reaktion auf die Nachricht der Methode performOk. Normalerweise aktualisiert und speichert diese Methode die Benutzervorgaben und aktualisiert gegebenenfalls andere Plug-in-Objekte, um die Änderungen in den Benutzervorgaben umzusetzen. Mit der Methode performDefaults werden die Benutzervorgaben auf ihre Standardeinstellung zurückgesetzt, wenn der Benutzer die Schaltfläche Standardwerte wiederherstellen auswählt.
Sie können die Methode performApply überschreiben, wenn Sie bei der Auswahl von Anwenden durch den Benutzer weitere Verarbeitungsschritte ausführen lassen wollen. In der Standardimplementierung wird performOk aufgerufen.
Benutzervorgabenseiten sollten die Methode doGetPreferenceStore() überschreiben, damit ein Benutzervorgabenspeicher für ihre Werte zurückgegeben wird.
Benutzervorgabespeicher stellen einen komfortablen Mechanismus für den Zugriff auf und das Speichern von Benutzervorgabenwerten in einer Plug-in-Klasse dar. Sie bieten auf Plug-in-Ebene Zugriff auf Benutzervorgaben, die eigentlich über den Laufzeitpräferenzenservice gespeichert werden. AbstractUIPlugin definiert einen plug-in-weiten Benutzervorgabespeicher, der während der Laufzeit des Plug-ins aufrecht erhalten wird. Ihr Plug-in kann diesem Benutzervorgabespeicher Einträge hinzufügen und die Werte aktualisieren, wenn der Benutzer die Einstellungen in Ihrer Benutzervorgabenseite ändert. Da Benutzervorgabenspeicher den Benutzervorgabenservice der Plattform verwenden, übernehmen sie die Aufgabe, diese Werte an den richtigen Bereichen und Positionen zu speichern und den Benutzervorgabenspeicher mit den geeigneten Mechanismen zu initialisieren.
Der folgende Code in ReadmePreferencePage ruft den Benutzervorgabenspeicher für ReadmePlugin ab.
protected IPreferenceStore doGetPreferenceStore() { return ReadmePlugin.getDefault().getPreferenceStore(); }
Da ReadmePlugin die Klasse AbstractUIPlugin erweitert, wird automatisch ein Benutzervorgabenspeicher übernommen. Dieser Benutzervorgabenspeicher wird über den Benutzervorgabenservice der Plattform initialisiert. ReadmePlugin muss jetzt nur noch eine Methode implementieren, die die Steuerelemente für die Benutzervorgaben mit den Standardwerten initialisiert. Diese Werte werden verwendet, wenn die Benutzervorgabenseite zum ersten Mal angezeigt wird oder der Benutzer auf der Benutzervorgabenseite die Schaltfläche Standardwerte auswählt.
protected void initializeDefaultPreferences(IPreferenceStore store) { // These settings will show up when Preference dialog // opens up for the first time. store.setDefault(IReadmeConstants.PRE_CHECK1, true); store.setDefault(IReadmeConstants.PRE_CHECK2, true); store.setDefault(IReadmeConstants.PRE_CHECK3, false); store.setDefault(IReadmeConstants.PRE_RADIO_CHOICE, 2); store.setDefault(IReadmeConstants.PRE_TEXT, MessageUtil.getString("Default_text")); //$NON-NLS-1$ }
Hinweis: Wenn für ein Plug-in nirgendwo Benutzervorgaben gespeichert wurden, erhält das Plug-in einen leeren Benutzervorgabenspeicher.
Sobald Sie der Benutzervorgabenseite Ihres Plug-ins einen Benutzervorgabenspeicher zugeordnet haben, können Sie die Logik für das Abrufen und Speichern der Benutzervorgaben implementieren.
Benutzervorgabenseiten haben die Aufgabe, die Werte ihrer Steuerelemente mit den Einstellungen aus dem Benutzervorgabenspeicher zu initialisieren. Dieser Prozess ist mit dem Initialisieren von Dialogsteuerelementen mit Werten aus Dialogeinstellungen vergleichbar. ReadmePreferencePage initialisiert alle Steuerelemente in einer einzigen Methode namens initializeValues, die aus der Methode createContents heraus aufgerufen wird.
private void initializeValues() { IPreferenceStore store = getPreferenceStore(); checkBox1.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK1)); checkBox2.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK2)); checkBox3.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK3)); ... }
Sobald die Schaltfläche OK (oder Übernehmen) ausgewählt wird, sollten die aktuellen Werte der Steuerelemente auf der Benutzervorgabenseite wieder im Benutzervorgabenspeicher gespeichert werden. ReadmePreferencePage implementiert diese Logik in einer separaten Methode namens storeValues.
private void storeValues() { IPreferenceStore store = getPreferenceStore(); store.setValue(IReadmeConstants.PRE_CHECK1, checkBox1.getSelection()); store.setValue(IReadmeConstants.PRE_CHECK2, checkBox2.getSelection()); store.setValue(IReadmeConstants.PRE_CHECK3, checkBox3.getSelection()); ... }
Wenn der Benutzer die Schaltfläche Standardwerte auswählt, setzt die Plattform alle Werte im Benutzervorgabenspeicher auf die Standardwerte zurück, die in der Plug-in-Klasse angegeben sind. Die Benutzervorgabenseite muss jedoch dafür sorgen, dass diese Standardwerte in den Steuerelementen der Benutzervorgabenseite wiedergegeben werden. ReadmePreferencePage implementiert diese Aufgabe in der Methode initializeDefaults.
private void initializeDefaults() { IPreferenceStore store = getPreferenceStore(); checkBox1.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK1)); checkBox2.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK2)); checkBox3.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK3)); ... }