2017-06-29 1 views
0

Bonsoir,Par défaut dans un FieldEditorPreferencePage via ScopedPreferenceStore

Avec java 1.7 Je suis en train de remplacer la méthode performApply() pour un FieldEditorPreferencePage en utilisant un code similaire à l'extrait ci-dessous. (Le code supplémentaire ne fait pas de différence, juste cette méthode)

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

Essentiellement, je veux mettre à jour la valeur de préférence par défaut pour PREF_KEY donc quand l'utilisateur clique Restaurez les paramètres par défaut après l'application d'un changement, il utilise la nouvelle valeur et pas l'ancien.

Le problème est que si je fais ceci, quand je réexécute mon programme le nouveau défaut n'est pas stocké. Si je renonce à l'utilisation de setDefault(), la nouvelle valeur par défaut est enregistrée.

Pour d'apporter des précisions

Avec l'aide setDefault:

Si je change de préférence A à 100, cliquez sur Appliquer, de préférence le changement A à 25, puis cliquez sur Restaurer les valeurs par défaut, je verrai 100. Si je redémarre mon programme et regardez préférence AI voir 50.

Sans utiliser par défaut set:

Si je change de préférence A à 100, cliquez sur appliquer, puis cliquez sur restaurer les valeurs par défaut, je verrai 50. Mais si je change de nouveau à 100, cl ick appliquer, puis redémarrer mon programme et regarder la préférence A je vois 100.

Qu'est-ce qui cause ce problème et comment puis-je le contourner?

Note: J'utilise un initialiseur de préférence, mais je souhaite changer dynamiquement la valeur par défaut à la dernière entrée utilisateur appliquée, sans le comportement bizarre mentionné ci-dessus.

Répondre

1

Pour définir les préférences par défaut, vous devez utiliser l'élément initializer du point d'extension org.eclipse.core.runtime.preferences pour définir une classe d'initialisation des préférences. N'essayez pas de surcharger ceci dans un éditeur de champ ou ailleurs.

<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

Je suis en train de changer la valeur par défaut après l'initialisation dynamique – pianoisland

+1

Vous ne pouvez pas modifier dynamiquement une valeur par défaut. Les valeurs par défaut ne sont stockées nulle part et la prochaine fois que vous le redémarrerez, elle revient à la valeur de l'initialisateur de préférence. –