首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

返回列表