2017-06-29 68 views
0

晚上好一個FieldEditorPreferencePage中,設置默認在通過ScopedPreferenceStore,是

與Java 1.7我試圖覆蓋使用類似下面的代碼片段一個FieldEditorPreferencePage中的performApply()方法。 (額外的代碼不會有所作爲,僅這一個方法)

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

基本上我想爲PREF_KEY更新默認優先值,所以當用戶點擊應用更改後還原爲默認值,它採用了新的價值而不是舊的。

問題是,如果我這樣做,當我重新運行我的程序時,不會存儲新的默認值。如果我放棄使用setDefault(),則存儲新的默認值。

爲了進一步澄清

隨着使用setDefault

如果我改變偏好到100,點擊應用,改變優先級A到25,然後單擊還原爲默認值,我會看100。如果我重新啓動我的程序,並期待在偏好AI見50

不使用默認設置:

如果我改變偏好到100,點擊Apply,然後單擊還原爲默認值,我會看50.但如果我改回100,cl ick apply,然後重新啓動我的程序,並看看首選項A,我看到100.

什麼是造成這種行爲,我怎麼能解決它?

注意:我正在使用首選項初始值設定項,但是我希望動態地將默認值更改爲上次應用的用戶輸入,而沒有上面提到的奇怪行爲。

回答

1

要設置首選項默認值,您應該使用org.eclipse.core.runtime.preferences擴展點的initializer元素來定義「首選項初始值設定項」類。不要試圖在現場編輯器或其他任何地方覆蓋它。

<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

我試圖更改默認的動態初始化 – pianoisland

+1

後,您不能動態地更改默認。默認值不會存儲在任何地方,下次重新啓動時將恢復到首選項初始值設定項值。 –