(英文原文)
Translated by Frank
Eclipse工作台中的Preference(2)
在plugin.xml中定義preference頁
現在我們已經定義了preference,下一步,我們想為使用者提供一種設定preference的值的方法。工作台的preference頁可以在preferences對話方塊中找到,而Preference對話方塊可以通過Window->Preferences菜單組找到。為了使你定義的外掛程式和其它的Eclipse外掛程式看起來讓人感覺風格一致,你應該使用plugin.xml來給preferences對話方塊添加preference頁。在plugin.xml中定義preference頁是這樣的:
<extension point="org.eclipse.ui.preferencePages">
<page id="BadWordsPreferencePage"
name="Bad Words"
class="org.eclipse.ui.articles.badwordchecker.BadWordsPreferencePage">
</page>
<page id="BadWordsColorPreferencePage"
name="Colors"
class="org.eclipse.ui.articles.badwordchecker.BadWordsColorPreferencePage"
category="BadWordsPreferencePage">
</page>
</extension>
上面的定義,在page的列表中設定了Preference的名字(),並且指定了preference頁的類名()。這個類必須與IWorkbenchPreferencePage保持一致,這意味著這個類必須以IWorkbenchPreferencePage為介面
在第二個定義中,有一個category()標記,它用來標識在preference對話方塊中的列表中,一個頁面作為另外一個頁面的子頁面。當希望把一系列彼此相關的頁面放在一起的時候,為了減少preference頁面的數量,這個功能非常有用。在plugin.xml檔案中,當把父頁面的id值作為這個頁面的category的值的時候,這個頁面就成了父頁面的子頁面。如果某個頁面沒有父頁面,那麼它就作為根的子頁面。正如一所看到的,preference對話方塊的頁面顯示如下:
圖1.顯示Bad Words和Color preference的Preference對話方塊
Color Preference頁
Color preference頁是一個簡單的例子,它使用了JFace 中一個簡單的fileld editor來管理它的值。開始我們應該定一個preference頁的類。在preference對話方塊中所有的類必須繼承自IWorkbenchPreferencePage。Eclipse包含類PreferencePage,這個類實現了大多數Preference所需要的API。當OK按鈕按下時,PreferenceDialog就會儲存preference store。如果你希望使用PreferencePage代替Window->Preferences中預設的對話方塊,那麼你必須確保在改變應用後儲存preference store。
我們的preference頁的類的定義如下:
class BadWordsColorPreferencePage
extends PreferencePage
implements IWorkbenchPreferencePage
一旦我們定義了頁,我們必須對它進行初始化。基於這個目的,IworkbenchPreferencePage指定了init(IWorkbench)函數。我們將不為這個頁面使用參數。我們的實現僅僅是為這個版面設定preference。
public void init(IWorkbench workbench) {
//Initialize the preference store we wish to use
setPreferenceStore(BadWordCheckerPlugin.getDefault().getPreferenceStore());
}
其它的我們必須實現的函數是createContents()。我們所要做的是使用ColorFieldEditor設定preference。同樣,我們也建議實現performDefaults以便重設外掛程式的值,使preference能夠恢複到初始預設狀態。我麼也要實現performOK函數,這樣的外掛程式就可以子在preference store中儲存使用者定義的prefenece。因為ColorFieldEditor有現成的讀取預設設定的代碼,也有為一個preference儲存結果的應用,所以我們的實現相當簡單。prenference儲存結果的應用在performOK中定義,而讀取預設設定的就是performDefaults,可以在ColorFieldEditor調用相應的方法。可以參見圖2種的Color preference頁。
protected void performDefaults() {
colorEditor.loadDefault();
}
/**
* Save the color preference to the preference store.
*/
public boolean performOk() {
colorEditor.store();
return super.performOk();
}
圖2:顯示Color preference的preference對話方塊。
(To be continued)