简体   繁体   English

将面板容器添加到Eclipse PDE项目中的PreferencePage

[英]Adding a panel container to a PreferencePage in an Eclipse PDE project

I'm using the FieldEditorPreferencePage class in order to create a preferences page for my Eclipse plug-in. 我正在使用FieldEditorPreferencePage类来为我的Eclipse插件创建首选项页面。 I've been able to add all the controls I need to the page, however there are several controls that I'd like to group together using a panel. 我已经能够将所需的所有控件添加到页面中,但是有几个控件我想使用面板组合在一起。

Here's an example from Eclipse's documentation. 这是Eclipse文档中的一个示例。 However, there's no information about how the "Open mode" panel was added to the page, and how controls were added to it. 但是,没有关于如何将“打开模式”面板添加到页面以及如何向其添加控件的信息。

How do I add a panel to an Eclipse PreferencePage ? 如何将面板添加到Eclipse PreferencePage

在此输入图像描述

I ended up writing my own GroupFieldEditor class, based on two implementations I found that didn't exactly meet my requirements. 我最终编写了自己的GroupFieldEditor类,基于我发现的两个不完全符合我要求的实现。 FieldEditor s can be added to that control, and the group can then be added to a FieldEditorPreferencePage object using the addField() method. 可以将FieldEditor添加到该控件,然后可以使用addField()方法将该组添加到FieldEditorPreferencePage对象。

The implementation is available here 该实现可在此处获得

For example, this is how the group looks in my plug-in project: 例如,这是该组在我的插件项目中的外观:

在此输入图像描述

A brief steps for adding a preferencePage: 添加首选项的简短步骤:

  1. open plugin.xml and go to Extension tab. 打开plugin.xml并转到Extension选项卡。
  2. Add extension point org.eclipse.ui.preferencePages 添加扩展点org.eclipse.ui.preferencePages
  3. Specify id/name and other attributes. 指定id / name和其他属性。
  4. Implement class extend from PreferencePage . 实现类从PreferencePage扩展。

If you want to group several controls in a panel and use it in FieldEditorPreferencePage , you can create new class extended from org.eclipse.jface.preference.FieldEditor . 如果要在面板中对多个控件进行分组并在FieldEditorPreferencePage使用它, FieldEditorPreferencePage可以创建从org.eclipse.jface.preference.FieldEditor扩展的新类。 For example: 例如:

public class MyFieldEditor extends FieldEditor {
    public MyFieldEditor(String name, String labelText, Composite parent) {
        super(name, labelText, parent);
    }

    protected void doFillIntoGrid(Composite parent, int numColumns) {
        //...add your controls to panel
        Group grpOpenMode = new Group(parent, SWT.NONE);
        grpOpenMode.setText("Open mode");
        grpOpenMode.setBounds(10, 10, 230, 117);

        btnDoubleClick = new Button(grpOpenMode, SWT.RADIO);
        btnDoubleClick.setBounds(10, 21, 90, 16);
        btnDoubleClick.setText("Double click");

        btnSingleClick = new Button(grpOpenMode, SWT.RADIO);
        btnSingleClick.setBounds(10, 43, 90, 16);
        btnSingleClick.setText("Single Click");

        Button btnSelectOnHover = new Button(grpOpenMode, SWT.CHECK);
        btnSelectOnHover.setBounds(20, 63, 123, 16);
        btnSelectOnHover.setText("Select on hover");

        Button btnOpenUsingArrowKey = new Button(grpOpenMode, SWT.CHECK);
        btnOpenUsingArrowKey.setBounds(20, 85, 188, 16);
        btnOpenUsingArrowKey.setText("Open when using arrow keys");
    }

    protected void doLoad() {
        // get preference value, and set data to UI, Invoked after doFillIntoGrid(...)
        String prefix = getPreferenceName();
        boolean isDoubleClick = getPreferenceStore().getBoolean(prefix+"_isDoubleClick");
        btnDoubleClick.setSelection(isDoubleClick);
        btnSingleClick.setSelection(!isDoubleClick);
        btnSelectOnHoverget.setSelection(getPreferenceStore().getBoolean(prefix+"_selectOnHover");
    }

    protected void doLoadDefault() {
        //Invoked in preferencePages.performDefaults() - user click "Restore Default" button
    }

    protected void doStore() {
        //save data of UI to preference store. Invoked in preferencePages.performOk() - user click "OK"/"Apply" button
        getPreferenceStore().setValue(getPreferenceName()+"_isDoubleClick",btnDoubleClick.getSelection());
    }
}

You can use RadioGroupFieldEditor to add a set of radio buttons surrounded by a Group control. 您可以使用RadioGroupFieldEditor添加由Group控件包围的一组单选按钮。

Something like: 就像是:

RadioGroupFieldEditor groupPref = new RadioGroupFieldEditor("preference key",
      "Group title message", 3, 
      new String[][] {
        {"radio 1 text", "preference value 1"}, 
        {"radio 2 text", "preference value 2"}, 
        {"radio 3 text", "preference value 3"}},
     getFieldEditorParent(), true /* use a group */);
addField(groupPref);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM