Eclipse 中的布局、属性和首选项(3)XM 首选项
 
- UID
- 1066743
|

Eclipse 中的布局、属性和首选项(3)XM 首选项
首选项类似于属性,但它们与插件相关,而与资源无关。
遗憾的是,Eclipse 存储首选项的方式不同于存储属性的方式。对于首选项,Eclipse使用首选项存储。必须用每个首选项的缺省值来初始化该存储(并且,事实上,如果首选项的值不是缺省值,则该存储只记录一条首选项)。
该存储在插件类中被初始化,这个类初始化对该插件而言是全局的对象。大多数插件都有一个插件类(如果您使用 Eclipse向导来生成新的插件,那么向导会自动生成一个),但不知何故,XM 没有这个插件类。
通过将一个类属性添加到清单中的 <plugin> 标记来声明插件类,如下所示:
1
| <plugin class="org.ananas.xm.eclipse.XMPlugin">
|
对于这个项目,插件类是 XMPlugin 。 XMPlugin 继承了 AbstractUIPlugin 。当框架装入这个插件时,会创建该插件类的实例,使它有机会初始化全局对象。
实质上插件并不能试图实例化插件类本身。内存中包含的这个插件类的实例从来不应该超过一个。为了使这一点更方便,插件类实现单模式(singleton pattern):它在私有类变量中存储一个自身的引用。通过 getDefault() 方法,可以访问该共享实例。
对我们来说,最有用的方法是 initializeDefaultPreferences() ,它初始化首选项存储中的缺省值,如下面所示:
1
2
3
4
| protected void initializeDefaultPreferences(IPreferenceStore store)
{
store.setDefault(LEVEL_PREFERENCE_NAME,LEVEL_ALL);
}
|
在 XMPreferencesPage 中实现了首选项页(在首选项页上,用户可以更改首选项值),如 所示。首选项页类似于属性页,但 Eclipse 提供了 FieldEditorPreferencePage 类,它是一个特殊的类,该类进一步简化了首选项页。
清单 6. XMPreferencesPage 类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| package org.ananas.xm.eclipse;
import org.ananas.xm.*;
import org.eclipse.ui.*;
import org.eclipse.jface.preference.*;
public class XMPreferencesPage
extends FieldEditorPreferencePage
implements PluginConstants, IWorkbenchPreferencePage
{
public XMPreferencesPage()
{
super(GRID);
IPreferenceStore store =
XMPlugin.getDefault().getPreferenceStore();
setPreferenceStore(store);
}
protected void createFieldEditors()
{
RadioGroupFieldEditor levelEditor =
new RadioGroupFieldEditor(
LEVEL_PREFERENCE_NAME,
Resources.getString("eclipse.level"),
1,
new String[][]
{
{ Resources.getString("eclipse.level.all"), LEVEL_ALL },
{ Resources.getString("eclipse.level.info"), LEVEL_INFO },
{ Resources.getString("eclipse.level.warning"), LEVEL_WARNING },
{ Resources.getString("eclipse.level.error"), LEVEL_ERROR },
},
getFieldEditorParent());
addField(levelEditor);
}
public void init(IWorkbench workbench)
{
}
}
|
FieldEditorPreferencePage 使用域编辑器,而不是常规的窗口小部件。域编辑器只是一个与首选项相关的窗口小部件。只需在 createFieldEditors() 方法中实例化域编辑器,而框架会负责装入和保存首选项。
最后,我更新了控制台以读取首选项,进而相应地显示消息。如 所示,控制台直接从插件类检索首选项存储。控制台还注册属性更改侦听器。当首选项发生变化(例如,通过首选项页做了更改)时,属性存储就通知侦听器。
清单 7. initializeDefaultPreferences() 方法1
2
3
4
5
6
7
8
9
| IPreferenceStore store = XMPlugin.getDefault().getPreferenceStore();
store.addPropertyChangeListener(new IPropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent e)
{
setLevel((String)e.getNewValue());
}
});
setLevel(store.getString(LEVEL_PREFERENCE_NAME));
|
|
|
|
|
|
|