Plug-in 首选项

来源:互联网 发布:伊迪芬奇的秘密知乎 编辑:程序博客网 时间:2024/06/11 16:00

Plug-in 首选项

首先申明下,本文为笔者学习《Eclipse插件开发学习笔记》的笔记,并加入笔者自己的理解和归纳总结。

1、创建首选项

(1) 扩展点【org.eclipse.ui.preferencePages】
在【org.eclipse.ui.preferencePages】中添加【page】,"class"指定首选项的类,必须实现IWorkbenchPreferencePage接口,一般会继承PreferencePage类来简化。

<extensionpoint="org.eclipse.ui.preferencePages"><pageclass="com.plugin.blog.demo.preference.HomePreferencePage"id="com.plugin.blog.demo.preference.HomePreferencePage"name="Demo"></page></extension>
HomePreferencePage类
public class HomePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {@Overrideprotected Control createContents(Composite parent) {Composite container = new Composite(parent, SWT.NULL);GridLayout containerLayout = new GridLayout();container.setLayout(containerLayout);Label label = new Label(container, SWT.NONE);label.setText("用户配置");label = new Label(container, SWT.NONE);label.setText("这是用户配置的首页");return container;}@Overridepublic void init(IWorkbench workbench) {noDefaultAndApplyButton();}}
显示如下

2、FieldEditorPreferencePage类

FieldEditorPreferencePage经常被用来作为首选项的父类来使用,并且定义了多种FieldEditor来方便使用。
定义了新的首选项页SamplePreferencePage,继承FieldEditorPreferencePage,并使用多个FieldEditor。

<extensionpoint="org.eclipse.ui.preferencePages"><pagecategory="com.plugin.blog.demo.preference.HomePreferencePage"class="com.plugin.blog.demo.preference.SamplePreferencePage"id="com.plugin.blog.demo.preference.SamplePreferencePage"name="FieldSample"></page></extension>
SamplePreferencePage类
public class SamplePreferencePage extends FieldEditorPreferencePageimplements IWorkbenchPreferencePage {private final static String[][] RADIO_ARRAY = new String[][] {{"radio1", "value1"}, {"radio2", "value2"}, {"radio3", "value3"}};public SamplePreferencePage() {super(GRID);setPreferenceStore(Activator.getDefault().getPreferenceStore());setDescription("Field Sample");}@Overridepublic void init(IWorkbench workbench) {}@Overrideprotected void createFieldEditors() {Composite parent = getFieldEditorParent();addField(new BooleanFieldEditor(PreferenceConstants.P_BOOLEAN,"Boolean", parent));addField(new RadioGroupFieldEditor(PreferenceConstants.P_RADIO,"Radio", 1, RADIO_ARRAY, parent, true));addField(new ComboFieldEditor(PreferenceConstants.P_COMBO,"Combo", RADIO_ARRAY, parent));addField(new StringFieldEditor(PreferenceConstants.P_STRING,"String", parent));addField(new IntegerFieldEditor(PreferenceConstants.P_INTEGER,"Integer", parent));addField(new ColorFieldEditor(PreferenceConstants.P_COLOR, "Color", parent));addField(new FontFieldEditor(PreferenceConstants.P_FONT, "Font", parent));addField(new DirectoryFieldEditor(PreferenceConstants.P_DIR, "Directory", parent));}}
PreferenceConstants类
public class PreferenceConstants {public static final String P_BOOLEAN = "user_info_booleanPreference";public static final String P_RADIO = "user_info_radioPreference";public static final String P_COMBO = "user_info_comboPreference";public static final String P_STRING = "user_info_stringPreference";public static final String P_INTEGER = "user_info_integerPreference";public static final String P_COLOR = "user_info_colorPreference";public static final String P_FONT = "user_info_fontPreference";public static final String P_DIR = "user_info_dirPreference";public static final String P_SHOW_PREVIEW= "user_info_show_preview";}

3、PreferenceInitializer类初始化

(1) 扩展点【org.eclipse.core.runtime.preferences】
在【org.eclipse.core.runtime.preferences】中添加【initializer】,"class"指定了初始化类,继承AbstractPreferenceInitializer

<extensionpoint="org.eclipse.core.runtime.preferences"><initializerclass="com.plugin.blog.demo.preference.PreferenceInitializer"></initializer></extension>
PreferenceInitializer类
public class PreferenceInitializer extends AbstractPreferenceInitializer {public void initializeDefaultPreferences() {IPreferenceStore store = Activator.getDefault().getPreferenceStore();store.setDefault(PreferenceConstants.P_BOOLEAN, true);store.setDefault(PreferenceConstants.P_RADIO, "value2");store.setDefault(PreferenceConstants.P_COMBO, "value3");store.setDefault(PreferenceConstants.P_STRING, "This is a String");store.setDefault(PreferenceConstants.P_INTEGER, 17);PreferenceConverter.setDefault(store, PreferenceConstants.P_COLOR,Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE).getRGB());PreferenceConverter.setDefault(store, PreferenceConstants.P_FONT,Display.getCurrent().getSystemFont().getFontData());store.setDefault(PreferenceConstants.P_DIR, "");store.setDefault(PreferenceConstants.P_SHOW_PREVIEW, true);}}
显示如下

4、首选项的监听

(1) 添加一个新的首选页,用来配置界面的显示。
<extensionpoint="org.eclipse.ui.preferencePages"><pagecategory="com.plugin.blog.demo.preference.HomePreferencePage"class="com.plugin.blog.demo.preference.UserInfoPreferencePage"id="com.plugin.blog.demo.preference.UserInfoPreferencePage"name="UserInfo"></page></extension>
UserInfoPreferencePage类,配置在编辑器DemoEditorPart中是否显示预览页。
public class UserInfoPreferencePage extends FieldEditorPreferencePageimplements IWorkbenchPreferencePage {public UserInfoPreferencePage() {super(GRID);setPreferenceStore(Activator.getDefault().getPreferenceStore());setDescription("用户信息配置");}@Overrideprotected void createFieldEditors() {Composite parent = getFieldEditorParent();addField(new BooleanFieldEditor(PreferenceConstants.P_SHOW_PREVIEW, "显示预览分页", parent));}@Overridepublic void init(IWorkbench workbench) {}}
显示如下

(2) 在DemoEditorPart添加监听器
private IPreferenceStore mStore;public DemoEditorPart() {mStore = Activator.getDefault().getPreferenceStore();mStore.addPropertyChangeListener(new IPropertyChangeListener() {@Overridepublic void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {if (PreferenceConstants.P_SHOW_PREVIEW.equals(event.getProperty())) {boolean show = (Boolean) event.getNewValue();try {if (show && getPageCount() == 1) {mPreviewFormPage = new UserPreviewFormPage(DemoEditorPart.this);addPage(mPreviewFormPage);} else if (!show && getPageCount() == 2) {setActivePage(0);removePage(1);}}catch (PartInitException e) {}}}});}@Overrideprotected void addPages() {mInfoFormPage = new UserInfoFormPage(this);mPreviewFormPage = new UserPreviewFormPage(this);try {addPage(mInfoFormPage);if (mStore.getBoolean(PreferenceConstants.P_SHOW_PREVIEW))addPage(mPreviewFormPage);} catch (PartInitException e) {}... ...}

原创粉丝点击