Eclipse RCP 中创建自定义首选项,并能读取首选项中的值

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; //用户名
	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 = new Text(composite, SWT.BORDER);
	   userName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
	   //设置用户名为保存在文件中的值
	   userName.setText(preferenceStore.getString(WorkFlowPreferenceConstants.USER_NAME)); 

	   new Label(composite, SWT.LEFT).setText("登录密码:");
	   password = new Text(composite, SWT.BORDER);
	   password.setEchoChar('*'); //设置密码用*显示
	   password.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
	   //设置密码为保存在文件中的值
	   password.setText(preferenceStore.getString(WorkFlowPreferenceConstants.PASSWORD));
	   return composite;
	}
	/*
	* 覆盖父类中的方法,但单击“恢复默认值”按钮时调用该方法
	*/
	protected void performDefaults() {
	   IPreferenceStore preferenceStore = getPreferenceStore();
	   userName.setText( preferenceStore.getDefaultString(WorkFlowPreferenceConstants.USER_NAME));
	   password.setText( preferenceStore.getDefaultString(WorkFlowPreferenceConstants.PASSWORD));
	}
	/*
	* 覆盖父类中的方法,但单击“应用”按钮时调用该方法
	*/
	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//用于扩展自己的按钮
	protected void contributeButtons(Composite parent) {
	   // super.contributeButtons(parent);
	   Button bt1 = new Button(parent, SWT.NONE);
	   bt1.setText("按钮一");
	   ((GridLayout) parent.getLayout()).numColumns++;
	   Button bt2 = new Button(parent, SWT.NONE);
	   bt2.setText("按钮二");
	   ((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("用户名:" + store.getString(WorkFlowPreferenceConstants.USER_NAME));
		System.out.println("密码:" + store.getString(WorkFlowPreferenceConstants.PASSWORD));//页面上的初始值
		

Eclipse RCP 中创建自定义首选项,并能读取首选项中的值

时间: 2024-10-19 12:27:41

Eclipse RCP 中创建自定义首选项,并能读取首选项中的值的相关文章

Eclipse rcp 开发 : 自定义导航视图CNF(3)为导航视图增加隐藏文件功能

org.eclipse.ui.navigator.navigatorContent 右键新增commonFilter id:  唯一 name :名称 如:*.xml resources description:描述, 如:Hides *.xml resources 在该属性下载增加属性:其中的value为通配xml  <filterExpression>             <and>                <adapt                     

【翻译】在Ext JS和Sencha Touch中创建自定义布局

原文:Creating Custom Layouts in Ext JS and Sencha Touch 布局系统是Sencha框架中最强大和最独特的一部分.布局会处理应用程序中每个组件的大小和位置,因而,不需要手动去管理那些碎片.Ext JS与Sencha Touch的布局类有许多相似之处,最近在 Ivan Jouikov的这篇博文中对他们进行了详细的分析. 虽然是这样,但很多Ext JS和Sencha Touch开发人员可能永远都不会去了解布局系统的机制原理.Sencha框架已经提供了最常

如何用VS2010在SharePoint中创建自定义字段类型(以eWebEditor为例)

如何用VS2010在SharePoint中创建自定义字段类型(以eWebEditor为例) 前提 项目中用到eWebEditor作为在线编辑器替换sharepoint2010自动的多行编辑器,下面以eWebEditor作为自定义字段类型为例来讲述如何用VS2010在sharepoint中创建自定义字段类型. 开发 1. 首先用VS2010创建一个空的sharepoint2010项目,如下图: 指向sharepoint站点,部署为场解决方案,如下图: 2. 在解决方案上添加“映射文件”,指向TEM

在Oracle电子商务套件版本12.2中创建自定义应用程序(文档ID 1577707.1)

在本文档中 本笔记介绍了在Oracle电子商务套件版本12.2中创建自定义应用程序所需的基本步骤.如果您要创建新表单,报告等,则需要自定义应用程序.它们允许您将自定义编写的文件与Oracle电子商务套件提供的标准种子功能分离.在向您的环境应用修补程序或执行升级时可以保留自定义设置. 自定义数据和索引表空间默认为APPS_TS_TX_DATA和APPS_TS_TX_IDX. 注意:当没有活动的修补程序周期时,应在运行文件系统上执行本文档中描述的过程. 也可以按照此过程更正先前创建的不使用AD Sp

JavaScript中创建自定义对象的方法

本文内容参考JavaScript高级程序设计(第3版)第6章:面向对象的程序设计 ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”我所理解的就是对象就是一个结构体,结构体中有一些它的基本属性以及对结构体处理的方法,把它们封装起来称为一个整体.JS中所有的对象都是基于一个引用类型创建,这个引用类型可以是原生类型,如Array,Date等,也可以是开发人员自定义的类型. 下面主要总结下JS中创建对象的几种模式,分析他们各自的优缺点. 1. 工厂模式 /****

Javascript 中创建自定义对象的方法(设计模式)

Javascript 中创建对象,可以有很多种方法. Object构造函数/对象字面量: 抛开设计模式不谈,使用最基本的方法,就是先调用Object构造函数创建一个对象,然后给对象添加属性. 1 var student = new Object(); 2 student.name = "xiao ming"; 3 student.age = 20; 4 student.getName = function () { 5 alert(this.name); 6 } 熟悉javascrip

在 ASP.NET MVC 中创建自定义 HtmlHelper

在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些像WebForm中的控件,只需传入一些参数即可生成相应的HTML代码.本文将介绍创建HtmlHelper的方法. Html.Textbox方法的返回值是MvcHtmlString,它生成了一些HTML代码.创建HtmlHelper,就像在生成HTML代码.下面以一个带有简要描述功能的链接HtmlHe

Django中创建自定义标签与过虑器

1.首先在app中创建templatetags目录(注意必须使用该名字,否则系统找不到自定义的标签),然后创建python文件common_extrgs.py. common_extrgs.py: from django import template #创建template.Library()实例register = template.Library() #使用@register.filter()注册成自定义过滤器@register.filter()def mycut(value,arg):

在html中创建自定义标签

创建并使用自定义标签 Web Components 标准非常重要的一个特性是,它使开发者能够将HTML页面的功能封装为 custom elements(自定义标签),本篇介绍使用 CustomElementRegistry 来管理我们的自定义标签 1. 创建自定义标签 <script> class PopUpInfo extends HTMLElement { constructor () { super(); // 在此定义自定义标签 我顶一个icon和text并列的 // Create a