【问题标题】:How can I keep the "restore defaults" and "apply" button on an Eclipse RCP PreferencePage at the bottom?如何在底部的 Eclipse RCP PreferencePage 上保留“恢复默认值”和“应用”按钮?
【发布时间】:2016-12-13 15:36:24
【问题描述】:

我制作了一个自定义的 PreferencePage,它会自动创建“恢复默认值”和“应用”按钮,但是,它们不会像它们一样停留在“确定”和“取消”按钮上方的右下角在 Eclipse IDE 首选项中执行。它们只是在我创建的最后一个小部件之后立即停靠。

如何让这些按钮保持停靠在右下方?

这是我的代码:

公共类 MVPrefPage 扩展 PreferencePage 实现 IWorkbenchPreferencePage {

List<FieldEditor> editors = new ArrayList<>();

public MVPrefPage() {
}

public MVPrefPage(String title) {
    super(title);
}

public MVPrefPage(String title, ImageDescriptor image) {
    super(title, image);
}

@Override
public void init(IWorkbench workbench) {
    setPreferenceStore(MatrixVisualizationActivator.getDefault().getPreferenceStore());
}

@Override
protected Control createContents(Composite parent) {

    editors.add(new BooleanFieldEditor(MatrixSettings.TITLE_ON_PROPERTY, "Show title", parent));
    editors.add(new BooleanFieldEditor(MatrixSettings.SHOW_ROW_HEADERS_PROPERTY, "Show row headers", parent));
    editors.add(new BooleanFieldEditor(MatrixSettings.SHOW_COLUMN_HEADERS_PROPERTY, "Show column headers", parent));
    editors.add(new BooleanFieldEditor(MatrixSettings.SHOW_HIDDEN_VALUES_PROPERTY, "Show hidden values", parent));
    editors.add(new BooleanFieldEditor(MatrixSettings.SHOW_MATRIX_ELEMENT_DISPLAY_NAMES_PROPERTY,
            "Show matrix element display names", parent));
    editors.add(new BooleanFieldEditor(MatrixSettings.CHART_SYNC_HIGHLIGHTER_PROPERTY,
            "Highlight view with chart sync", parent));
    editors.add(new BooleanFieldEditor(MatrixSettings.CHART_SYNC_SCROLL_PROPERTY, "Scroll view with chart sync",
            parent));
    editors.add(new BooleanFieldEditor(MatrixSettings.VIEW_SCROLLBAR_SYNC_PROPERTY, "Add scrollbar to synchronizer",
            parent));

    String[][] entryNamesAndValues = { { "Left", "LEFT" }, { "Right", "RIGHT" }, { "Center", "CENTER" } };
    editors.add(new ComboFieldEditor(MatrixSettings.VIEW_SNAP_PROPERTY, "Grid snap setting", entryNamesAndValues,
            parent));

    editors.stream().forEach(fe -> {
        fe.setPreferenceStore(getPreferenceStore());
        fe.fillIntoGrid(parent, 2);
        fe.load();
    });

    return parent;
}

/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
 */
@Override
protected void performDefaults() {
    editors.stream().forEach(fe -> fe.loadDefault());
    super.performDefaults();
}

/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.preference.PreferencePage#performOk()
 */
@Override
public boolean performOk() {
    editors.stream().forEach(fe -> fe.store());
    return super.performOk();
}

/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.preference.PreferencePage#performApply()
 */
@Override
protected void performApply() {
    super.performApply();
}

/*
 * (non-Javadoc)
 * 
 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 */
@Override
public void dispose() {
    editors.stream().forEach(fe -> fe.dispose());
    super.dispose();
}

【问题讨论】:

  • 这应该可以。您可能在偏好页面中做错了什么。向我们展示一个 minimal reproducible example 来演示问题。特别是你在createContents 方法中所做的事情。
  • 我已经编辑了帖子以包含我正在使用的代码。
  • 您不能在FieldEditorPreferencePage 之外使用这样的字段编辑器类,因为字段编辑器希望能够调整页面布局,而当不在@987654327 中时它将无法正常工作@
  • 这就是问题所在,非常感谢!

标签: java eclipse eclipse-rcp


【解决方案1】:

您不能像这样在 FieldEditorPreferencePage 之外使用诸如 BooleanFieldEditor 之类的字段编辑器类,因为字段编辑器希望能够调整页面布局,并且当不在 @987654323 中时它将无法正常工作@。

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多