构建eclipse plugin 的Preferences

本文介绍如何在Eclipse RCP应用中创建自定义偏好设置页面,并演示了密码策略配置的具体实现过程。通过继承FieldEditorPreferencePage并实现IWorkbenchPreferencePage接口,可以轻松构建复杂的偏好设置界面。
现在正在做一个rcp软件,刚刚做好了Preferences,总结一下。此方法也适用eclipse plugin。在作ipass的时候,没有发现有这么简便的方法。
 
以一个配置密码策略的页面为例:
public class PreferencePassPolicyPage extends FieldEditorPreferencePage
              implements IWorkbenchPreferencePage {
       public static final String PASSWORD_CHARS = "passgate.password.chars";
       public static final String ALPHABETIC = "alphabetic";
       public static final String ALPHANUMERIC = "alphanumeric";
       public static final String NUMERIC = "numeric";
       public static final String PASSWORD_CASE = "passgate.password.case";
       public static final String UPPER = "uppercase";
       public static final String LOWER = "lowercase";
       public static final String MIXED = "mixed";
       public static final String PASSWORD_LENGTH = "passgate.password.length";
       public PreferencePassPolicyPage() {
              super(GRID);
              setTitle("Password Policy");
              setImageDescriptor(ImageShop.getDescriptor("category_obj"));
              setPreferenceStore(PwdgatePlugin.getDefault().getPreferenceStore());
       }
       public void init(IWorkbench workbench) {
       }
       protected void createFieldEditors() {
              // characters
              String[][] choose = new String[][] {
                            new String[] { "Use alphabetic only", ALPHABETIC },
                            new String[] { "Use numberic only", NUMERIC },
                            new String[] { "Use alphanumeric only", ALPHANUMERIC } };
              FieldEditor charcterEditor = new RadioGroupFieldEditor(PASSWORD_CHARS,
                            "Characters", 1, choose, getFieldEditorParent(), true);
              addField(charcterEditor);
 
              // case
              choose = new String[][] { new String[] { "Lower case", LOWER },
                            new String[] { "Upper case", UPPER },
                            new String[] { "Mixed", MIXED } };
              FieldEditor caseEditor = new RadioGroupFieldEditor(PASSWORD_CASE,
                            "Case", 1, choose, getFieldEditorParent(), true);
              addField(caseEditor);
 
              FieldEditor lengthEditor = new IntegerFieldEditor(PASSWORD_LENGTH,
                            "Password length", getFieldEditorParent());
              addField(lengthEditor);
       }
}
 
页面继承了FieldEditorPreferencePage,只需要实现createFieldEditors()即可构建自己的Preference结构;实现了IWorkbenchPreferencePage接口,这样eclipse才能够通过plugin.xml中定义的extension point="org.eclipse.ui.preferencePages"加载本页。程序开始的静态常量是本页要用到的key,用来保存相应的属性值。在createFieldEditors()方法中,RadioGroupFieldEditor是一组Radio Button,省去了自己一个一个的常见控件。相应的还有IntegerFieldEditor,BooleanFieldEditor,StringFieldEditor等等可以使用,使用方法十分简单,参考api即可。实现的效果如下:
 
在plugin.xml文件中加入如下内容:
         point="org.eclipse.ui.preferencePages">
      e
            class="com.mi.pwdgate.dialog.PreferenceEditorPage"
            id="com.mi.pwdgate.dialog.PreferenceEditorPage"
            name="PassGate"/>
     
            category="com.mi.pwdgate.dialog.PreferenceEditorPage"
            class="com.mi.pwdgate.dialog.PreferencePassPolicyPage"
            id="com.mi.pwdgate.dialog.PreferencePassPolicyPage"
            name="Password Policy"/>
class为自己编写的preference页面的类,id可以任意取,但必须要使唯一的,一般都用类名,name是用来显示在界面上的名字,category是当前的Preference属于哪个Preference,就填写哪个Preferenceid。本例中Password Policy的父节点是PassGate
 
设定Preference的默认值
       编写PreferenceInitializer.java,在这里设定preference的默认值,必须要继承AbstractPreferenceInitializer类。
public class PreferenceInitializer extends AbstractPreferenceInitializer {
       public void initializeDefaultPreferences() {
              IPreferenceStore store = PwdgatePlugin.getDefault()
                            .getPreferenceStore();
              // for PassPolicy Preference
              store.setDefault(PreferencePassPolicyPage.PASSWORD_CHARS,
                            PreferencePassPolicyPage.ALPHANUMERIC);
              store.setDefault(PreferencePassPolicyPage.PASSWORD_CASE,
                            PreferencePassPolicyPage.LOWER);
              store.setDefault(PreferencePassPolicyPage.PASSWORD_LENGTH, 8);
 
              // for interaction preference
              store.setDefault(PreferenceInteractionPage.DELETE_COMFIRM, true);
              store.setDefault(PreferenceInteractionPage.DELETE_TO_BIN, true);
       }
}
在plugin.xml文件中加入如下内容:
         point="org.eclipse.core.runtime.preferences">
      class="com.mi.pwdgate.dialog.PreferenceInitializer"/>
 
再给一张截图



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值