如何在Eclipse RCP应用程序中设置首选项的默认值

5
我有一个RCP应用程序,当RCP作为应用程序运行时,我需要将某些值设置为首选项页面的默认值。我需要隐藏快速视图栏和某些菜单,以便从特定角度设置这些设置,因此我需要从首选项页面设置这些设置。
我的应用程序还不是产品,因此我不能使用plugin_customization.ini文件进行更改。
有人可以告诉我通过首选项页面或其他方式以编程方式更改默认值的方法吗?
2个回答

11

定义你的偏好页面的扩展点,并为该页面的初始化器类定义扩展点:

一个示例偏好页面实现可能如下所示:

public class MyPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
    public static final String PREF_USE_METRIC_UNITS = "PREF_USE_METRIC_UNITS";
    public static final String PREF_AUTO_UPDATE = "PREF_AUTO_UPDATE";
    public static final String PREF_USER_FILES_DIR = "PREF_USER_FILES_DIR";
    public static final String PREF_FAVORITE_ANIMAL = "PREF_FAVORITE_ANIMAL";

    public MyPreferencePage() {
        super(GRID);
    }

    public void createFieldEditors() {
        Composite parent = getFieldEditorParent();
        addField(new BooleanFieldEditor(PREF_USE_METRIC_UNITS, "Use &metric units", parent));
        addField(new BooleanFieldEditor(PREF_AUTO_UPDATE, "&Auto update", parent));

        addField(new DirectoryFieldEditor(PREF_USER_FILES_DIR, "User files &path:", parent));

        addField(new StringFieldEditor(PREF_FAVORITE_ANIMAL, "Favorite &animal:", parent));
    }

    public void init(IWorkbench workbench) {
        setPreferenceStore(Plugin.getPlugin().getPreferenceStore());
    }
}

然后在你的AbstractPreferenceInitializer类中设置实际的默认值:

public class MyPreferenceInitializer extends AbstractPreferenceInitializer {
    @Override
    public void initializeDefaultPreferences() {
        IPreferenceStore store = Plugin.getPlugin().getPreferenceStore();

        store.setDefault(MyPreferencePage.PREF_USE_METRIC_UNITS, true);
        store.setDefault(MyPreferencePage.PREF_AUTO_UPDATE, false);

        String userHome = System.getProperty("user.home");
        String defaultPath = userHome + "\\Local Settings\\Temp\\";
        store.setDefault(MyPreferencePage.PREF_USER_FILES_DIR, defaultPath);

        store.setDefault(MyPreferencePage.PREF_FAVORITE_ANIMAL, "platypus");
    }
}

因为你的回答扩展了我的,我会给你一个+1 ;) - aphex
我喜欢提供的代码示例。但是“为您的首选项页面定义扩展点”的措辞有点模糊。实际上有两个扩展点可以符合条件(org.eclipse.core.runtime.preferences或org.eclipse.ui.preferencePages)。如果您确切地命名扩展点,答案会更好。幸运的是,我在@aphex的答案中找到了这部分问题的答案。我想两个答案都提供了完整的信息,互相补充。 :-) - Kris

7
您可以使用扩展点org.eclipse.core.runtime.preferences来实现。
 <extension
         point="org.eclipse.core.runtime.preferences">
         <scope name="SamplePreferencePage" class="com.example.SamlePreferencePage"/>
      <initializer
            class="com.example.PreferenceInitializer">
      </initializer>
  </extension>

我使用了这个扩展点,但是当我使用setValues(String PreferenceName, Boolean value)时,我不知道偏好设置的名称来设置它的值。 - Shereen
如果我想将“快速查看栏”隐藏布尔值设置为true,那么PreferenceName应该写什么? - Shereen
这是您的应用程序偏好设置;您可以随意命名。将其命名为“HideFastViewBar”。 - stracka
您可以查看stracka的示例。对于每个字段,您都需要提供一个StringID。使用相同的字符串,您可以从PreferenceStore中检索值。 - aphex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接