Eclipse RCP的插件中若想自定义首选项须要扩展扩展点:
org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值
org.eclipse.ui.preferencePages//该扩展点用于定义自己的首选项页面
plugin.xml中内容如:
Database Preferences挂在WorkFlowBase下。须要在category中填写workFlowBase的ID
WorkFlowPreferenceInitializer类。用于初始化首选项中的值
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jface.preference.IPreferenceStore;
import mydesigner.WorkFlowActivator;
/*** Class used to initialize default preference values.* 首选项的初始化*/
public class WorkFlowPreferenceInitializer extends AbstractPreferenceInitializer {/** (non-Javadoc)* * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()*/public void initializeDefaultPreferences() {IPreferenceStore store = WorkFlowActivator.getDefault().getPreferenceStore();store.setDefault(WorkFlowPreferenceConstants.P_BOOLEAN, true);store.setDefault(WorkFlowPreferenceConstants.P_CHOICE, "choice2");store.setDefault(WorkFlowPreferenceConstants.P_STRING,"Default value");store.setDefault(WorkFlowPreferenceConstants.USER_NAME, "admin");store.setDefault(WorkFlowPreferenceConstants.PASSWORD, "123456");//页面上的初始值}
}
WorkFlowPreferenceConstants 该类定义了首选项中的常量 public class WorkFlowPreferenceConstants {public static final String P_PATH = "pathPreference";public static final String P_BOOLEAN = "booleanPreference";public static final String P_CHOICE = "choicePreference";public static final String P_STRING = "stringPreference";public static final String USER_NAME ="userName"; public static final String PASSWORD = "passWord";}
WorkFlowBasePreferencePage该类定义了首选项中的workFlow页面import mydesigner.WorkFlowActivator;import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;import com.workflow.preferences.WorkFlowPreferenceConstants;
/*** 首选项中的workFlow页面* @author lww**/
public class WorkFlowBasePreferencePage extends PreferencePage implements IWorkbenchPreferencePage{private Text userName; //usernameprivate Text password; //密码框public WorkFlowBasePreferencePage() {super();setPreferenceStore(WorkFlowActivator.getDefault().getPreferenceStore());setDescription("This is a workflowBase PreferencePage!");}@Overridepublic void init(IWorkbench workbench) {}//该方法为必须实现的方法,在此方法中创建页面上的各种控件 @Overrideprotected Control createContents(Composite parent) {Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); //获取保存此页面的PreferenceStore对象 IPreferenceStore preferenceStore = getPreferenceStore(); new Label(composite, SWT.LEFT).setText("登录username:"); userName = new Text(composite, SWT.BORDER); userName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); //设置username为保存在文件里的值 userName.setText(preferenceStore.getString(WorkFlowPreferenceConstants.USER_NAME)); new Label(composite, SWT.LEFT).setText("登陆password:"); password = new Text(composite, SWT.BORDER); password.setEchoChar('*'); //设置密码用*显示password.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); //设置密码为保存在文件里的值 password.setText(preferenceStore.getString(WorkFlowPreferenceConstants.PASSWORD)); return composite; }/* * 覆盖父类中的方法。但单击“恢复默认值”button时调用该方法 */ protected void performDefaults() { IPreferenceStore preferenceStore = getPreferenceStore(); userName.setText( preferenceStore.getDefaultString(WorkFlowPreferenceConstants.USER_NAME)); password.setText( preferenceStore.getDefaultString(WorkFlowPreferenceConstants.PASSWORD)); } /* * 覆盖父类中的方法,但单击“应用”button时调用该方法 */ public boolean performOk() { IPreferenceStore preferenceStore = getPreferenceStore(); if (userName != null) preferenceStore.setValue(WorkFlowPreferenceConstants.USER_NAME, userName.getText()); if (password != null) preferenceStore.setValue(WorkFlowPreferenceConstants.PASSWORD, password.getText()); return true; } @Override//用于扩展自己的buttonprotected void contributeButtons(Composite parent) { // super.contributeButtons(parent); Button bt1 = new Button(parent, SWT.NONE); bt1.setText("button一"); ((GridLayout) parent.getLayout()).numColumns++; Button bt2 = new Button(parent, SWT.NONE); bt2.setText("button二"); ((GridLayout) parent.getLayout()).numColumns++; }
}
DBPreferencePage该类定义了DB的首选项页面 import org.eclipse.jface.preference.*;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.IWorkbench;import com.workflow.preferences.WorkFlowPreferenceConstants;import mydesigner.WorkFlowActivator;public class DBPreferencePageextends FieldEditorPreferencePageimplements IWorkbenchPreferencePage {public DBPreferencePage() {super(GRID);setPreferenceStore(WorkFlowActivator.getDefault().getPreferenceStore());setDescription("A demonstration of a preference page implementation");}/*** Creates the field editors. Field editors are abstractions of* the common GUI blocks needed to manipulate various types* of preferences. Each field editor knows how to save and* restore itself.*/public void createFieldEditors() {addField(new DirectoryFieldEditor(WorkFlowPreferenceConstants.P_PATH, "&Directory preference:", getFieldEditorParent()));addField(new BooleanFieldEditor(WorkFlowPreferenceConstants.P_BOOLEAN,"&An example of a boolean preference",getFieldEditorParent()));addField(new RadioGroupFieldEditor(WorkFlowPreferenceConstants.P_CHOICE,"An example of a multiple-choice preference",1,new String[][] { { "&Choice 1", "choice1" }, {"C&hoice 2", "choice2" }}, getFieldEditorParent()));addField(new StringFieldEditor(WorkFlowPreferenceConstants.P_STRING, "A &text preference:", getFieldEditorParent()));}/* (non-Javadoc)* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)*/public void init(IWorkbench workbench) {}}
运行结果如图:
设置的值会保存到
runtime-myDesigner.product\.metadata\.plugins\org.eclipse.core.runtime\.settings中会生成文件
MyDesigner.prefs(MyDesigner是当前的插件名)
若要读取该文件里的值:
//获取首选项中的值IPreferenceStore store = WorkFlowActivator.getDefault().getPreferenceStore();System.out.println("username:" + store.getString(WorkFlowPreferenceConstants.USER_NAME));System.out.println("密码:" + store.getString(WorkFlowPreferenceConstants.PASSWORD));//页面上的初始值
弹出相应的首选项对话框:
//将用户引导至首选项配置页面 PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager(); Shell parentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); PreferenceDialog pd = new PreferenceDialog(parentShell, manager); pd.setSelectedNode("com.workflow.preferences.page.DBPreferencePage");//设置选中的页面 (org.eclipse.ui.preferencePages 扩展点中page的ID)pd.open();
该对话框中没有搜索过滤栏。
还有一种实现:
PreferencesUtil.createPreferenceDialogOn(new Shell(), "com.workflow.preferences.page.DBPreferencePage", new String[]{"com.workflow.preferences.page.WorkFlowBasePreferencePage","com.workflow.preferences.page.DBPreferencePage"}, null).open();
界面例如以下所看到的:
上面的new string 数组參数主要定义左边显示哪些首页项节点栏,若为null,就显示全部的所选项