通过ScopedPreferenceStore在FieldEditorPreferencePage中设置Default

时间:2017-06-29 21:58:44

标签: java eclipse-plugin eclipse-rcp

晚上好,

使用java 1.7我试图使用类似于以下代码段的代码覆盖FieldEditorPreferencePage的String firstChar = "" + answer.charAt(0); if(firstChar.equalsIgnoreCase("y")){ .... } else if(firstChar.equalsIgnoreCase("n")){ .... } 方法。 (附加代码没有区别,只有这一种方法)

performApply()

基本上我想更新@Override public void performApply() { scopedPreferenceStore.setDefault(PREF_KEY, value); super.performApply(); } 的默认首选项值,因此当用户在应用更改后点击恢复默认值时,它会使用新值而不是旧值。

问题在于,如果我这样做,当我重新运行程序时,新的默认值不会被存储。如果我放弃使用PREF_KEY,则会存储新的默认值。

进一步澄清

使用setDefault()

如果我将首选项A更改为100,请单击“应用”,将首选项A更改为25,然后单击“恢复默认值”,我将看到100.如果我重新启动程序并查看首选项A,我会看到50。

不使用set default:

如果我将首选项A更改为100,请单击“应用”,然后单击“恢复默认值”,我将看到50.但如果我将其更改回100,请单击“应用”,然后重新启动我的程序并查看首选项AI见100。

是什么导致了这种行为以及如何绕过它?

注意:我正在使用首选项初始化程序,但是我希望动态地将默认值更改为上次应用的用户输入,而不会出现上面提到的奇怪行为。

1 个答案:

答案 0 :(得分:1)

要设置首选项默认值,您应使用initializer扩展点的org.eclipse.core.runtime.preferences元素来定义“首选项”初始化程序'类。不要在字段编辑器或其他任何地方尝试覆盖它。

 <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); 
  }
}