Eclipse RCP的插件中若想自定义首选项须要扩展扩展点:

org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值

org.eclipse.ui.preferencePages//该扩展点用于定义自己的首选项页面

plugin.xml中内容如:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVvd3cx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

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();

界面例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVvd3cx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

上面的new string 数组參数主要定义左边显示哪些首页项节点栏,若为null,就显示全部的所选项

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

  1. JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

    1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; ...

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

    原文:Creating Custom Layouts in Ext JS and Sencha Touch 布局系统是Sencha框架中最强大和最独特的一部分.布局会处理应用程序中每个组件的大小和位置 ...

  3. 输入整数n(n<=10000),表示接下来将会输入n个实数,将这n个实数存入数组a中。请定义一个数组拷贝函数将数组a中的n个数拷贝到数组b中。

    代码一大串! #include<stdio.h> ],y[]; void arraycopy (double c[],double d[],int m); { ;i<=m;i++) ...

  4. 编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

    package zuoye; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; pub ...

  5. 1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  6. 在64位SQL Server中创建Oracle的链接服务器

    当我们同时使用SQL Server和Oracle来存储数据时,经常会用到跨库查询.为了方便使用跨库查询,一个最好的办法就是通过创建链接服务器来实现.既可以在SQL Server中创建Oracle的链接 ...

  7. C#利用NPOI在同一个Excel文件中创建多个sheet

    借用NPOI来实现,要在同一Excel文件中创建多个sheet,只需要在同一个workbook中创建多个sheet即可.要注意的是,sheet的名字一定不能重复.下面是实现的代码: private v ...

  8. python开发_python中的函数定义

    下面是我做的几个用列: #python中的函数定义,使用和传参 def_str = '''\ python中的函数以如下形式声明: def 函数名称([参数1,参数2,参数3......]): 执行语 ...

  9. Django中models定义的choices字典使用get_FooName_display()在页面中显示值

    问题 在django的models.py 中,我们定义了一些choices的元组,类似一些字典值,一般都是下拉框或者单多选框,例如 0对应男 1对应女等等 看下例子: class Area(model ...

随机推荐

  1. Redis操作使用规范

    Windows 64位操作系统 Redis 安装包(当前教程版本2.8.12) 百度经验:jingyan.baidu.com 方法/步骤   1 在D盘新建文件夹[redis],右键解压Redis Z ...

  2. JavaScript学习总结(9)——JS常用函数(一)

    本文中,收集了一些比较常用的Javascript函数,希望对学习JS的朋友们有所帮助. 1. 字符串长度截取 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  3. 关于multiprocessing,我也来聊几句

    起因:近期须要从hbase中向 ES中导一批数据.使用multiprocessing 启动多个程序同一时候向ES导数据.能够大大提高效率.由于导数的任务是能够依照时间切割的. 一段简单的代码例如以下: ...

  4. 2.Xml与多个对象的映射(聚合或组合)及注意事项

    在我们的实际应用中,Xml中的结构往往不止这么简单,一般都会有2,3层.也就是说如果映射成对象就是聚合(组合)的情况 . 就用我们上一章的例子继续来讲,简单我们的Book的author现在不止是一个S ...

  5. 3.SOAP和WSDL的一些必要知识

    转自:https://www.cnblogs.com/JeffreySun/archive/2009/12/14/1623766.html SOAP和WSDL对Web Service.WCF进行深入了 ...

  6. 1.17 Python基础知识 - 迭代器和生成器初识

    可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] ...

  7. C# 性能优化

    StringBuilder sb = new StringBuilder( 256 ). 避免不必要的调用 ToUpper 或 ToLower 方法,可以用Compare忽略大小写比较. 尽量在循环中 ...

  8. 使用Multiplayer Networking做一个简单的多人游戏例子-1/2

    原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 本文主要讲述了如何使用Multiplayer Networking开发多人游 ...

  9. System and method for controlling switching between VMM and VM using enabling value of VMM timer indicator and VMM timer value having a specified time

    In one embodiment, a method includes transitioning control to a virtual machine (VM) from a virtual ...

  10. 业余学习react 学习记录

    http://www.ruanyifeng.com/blog/2015/03/react (阮一峰 react 学习) 1.搭建环境:npm 使用 React npm install -g cnpm ...