2017-06-29 2 views
0

Guten Abend,Set Default in einem FieldEditorPreferencePage über ScopedPreferenceStore

Mit Java 1.7 Ich versuche, die performApply() Methode für einen FieldEditorPreferencePage mit Code ähnlich den Snippet unten außer Kraft zu setzen. (Der Zusatzcode keinen Unterschied machen, nur diese eine Methode)

@Override 
public void performApply() { 
    scopedPreferenceStore.setDefault(PREF_KEY, value); 
    super.performApply(); 
} 

Grund mag ich den Standard-Präferenzwert für PREF_KEY so aktualisieren, wenn die Benutzer Treffer Standardeinstellung wiederherstellen, nachdem eine Änderung vorzunehmen, verwendet es die neuen Wert und nicht der alte.

Das Problem ist, dass, wenn ich dies tue, wenn ich mein Programm erneut ausführen, der neue Standard nicht gespeichert wird. Wenn ich auf die Verwendung von setDefault() verzichte, wird der neue Standard gespeichert.

Zur weiteren Klärung

Mit setDefault mit:

Wenn ich Präferenz A bis 100 ändern, werden klicken, bevorzugt eine Änderung 25, klicken Sie dann auf Standardeinstellungen wiederherstellen, I 100. sehen Wenn ich meine neu starten Programm und schauen bevorzugt AI siehe 50.

Ohne Set Standard mit:

wenn ich Präferenz A bis 100 zu ändern, klicken anzuwenden, klicken sie dann auf Standard wiederherstellen, ich 50 sehen Aber wenn ich es ändern zurück zu 100, Kl ick anwenden, dann mein Programm neu starten und auf Präferenz A schauen Ich sehe 100.

Was verursacht dieses Verhalten und wie kann ich es umgehen?

Hinweis: Ich verwende einen Präferenzinitialisierer, jedoch möchte ich den Standardwert dynamisch auf die zuletzt angewendete Benutzereingabe ändern, ohne das oben erwähnte seltsame Verhalten.

Antwort

1

Um Voreinstellungen festzulegen, verwenden Sie das Element initializer des Erweiterungspunkts org.eclipse.core.runtime.preferences, um eine Klasse 'Präferenzen Initialisierer' zu definieren. Versuchen Sie nicht, dies in einem Feld-Editor oder anderswo zu überschreiben.

<extension point="org.eclipse.core.runtime.preferences"> 
    <initializer class="com.example.MyPreferenceInitializer"/> 
</extension> 
public class MyPreferenceInitializer extends AbstractPreferenceInitializer 
{ 
    @Override 
    public void initializeDefaultPreferences() 
    { 
    IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); 

    prefs.setDefault(PREF_KEY, VALUE); 
    } 
} 
+0

Ich versuche, die standardmäßig dynamisch nach der Initialisierung – pianoisland

+1

Sie dynamisch eine Standard ändern können nicht geändert werden. Standardwerte werden nirgendwo gespeichert und beim nächsten Neustart wird wieder der Initializer-Wert der Präferenz verwendet. –