博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eclipse RCP 中创建自己定义首选项,并能读取首选项中的值
阅读量:6212 次
发布时间:2019-06-21

本文共 7465 字,大约阅读时间需要 24 分钟。

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; //username	private Text password; //密码框		public WorkFlowBasePreferencePage() {		super();		setPreferenceStore(WorkFlowActivator.getDefault().getPreferenceStore());		setDescription("This is a workflowBase PreferencePage!");	}	@Override	public void init(IWorkbench workbench) {			}	//该方法为必须实现的方法,在此方法中创建页面上的各种控件 	@Override	protected 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//用于扩展自己的button	protected 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 DBPreferencePage	extends FieldEditorPreferencePage	implements 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,就显示全部的所选项

你可能感兴趣的文章
继续聊WPF——动态数据模板
查看>>
如何使员工能力和收入相匹配?
查看>>
程序出现这样的问题,到底是谁的责任?
查看>>
配置CVS服务器和客户端完全解析
查看>>
Qt的QFile类详解
查看>>
假如我是个程序员
查看>>
ORACLE HANDBOOK系列之十二:高级队列(Advanced Queuing)
查看>>
Tuscany SCA Core实现的SPI机制
查看>>
任意两个时间之间的星期几的次数-横.sql
查看>>
Fail2ban
查看>>
POJ-1062 昂贵的聘礼 dfs
查看>>
python 获取当前方法名
查看>>
Knockout.Js官网学习(Mapping插件)
查看>>
freemarker 超出字符用省略号表示
查看>>
在Ubuntu下构建Bullet以及执行Bullet的样例程序
查看>>
【C#】与C及OC的不同点
查看>>
iOS开发--Bison详解连连支付集成简书
查看>>
开发版本控制git
查看>>
项目管理学习笔记之五.沟通协调能力I
查看>>
NSString的常用方法
查看>>