现在正在做一个
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文件中加入如下内容:
<extension
point=
"org.eclipse.ui.preferencePages"
>
<pag
e
class=
"com.mi.pwdgate.dialog.PreferenceEditorPage"
id=
"com.mi.pwdgate.dialog.PreferenceEditorPage"
name=
"PassGate"
/>
<page
category=
"com.mi.pwdgate.dialog.PreferenceEditorPage"
class=
"com.mi.pwdgate.dialog.PreferencePassPolicyPage"
id=
"com.mi.pwdgate.dialog.PreferencePassPolicyPage"
name=
"Password Policy"
/>
</extension>
class为自己编写的preference页面的类,id可以任意取,但必须要使唯一的,一般都用类名,name是用来显示在界面上的名字,
category
是当前的
Preference
属于哪个
Preference
,就填写哪个
Preference
的
id
。本例中
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文件中加入如下内容:
<extension
point=
"org.eclipse.core.runtime.preferences"
>
<initializer
class=
"com.mi.pwdgate.dialog.PreferenceInitializer"
/>
</extension>
再给一张截图
