gpt4 book ai didi

view - Eclipse 插件从 ViewPart 访问首选项

转载 作者:行者123 更新时间:2023-12-04 18:07:24 24 4
gpt4 key购买 nike

我在透视图中有一个 View ,它在工具栏中有一个操作。此操作打开 PreferenceDialog。因此,此对话框中的首选项绑定(bind)到打开它的 View 。我之所以选择这种方式,是因为用户可以打开该 View 的多个不同内容,并且每个 View 都有其偏好。

如何在 ViewPart 中访问此首选项?我这样试过

IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();

但是 Eclipse 告诉我这个:

Multiple markers at this line
- The method getDefault() is undefined for the type Activator
- Discouraged access: The type Activator is not accessible due to restriction on required library
C:\Users\xxx\eclipse\plugins\org.eclipse.equinox.preferences_3.5.100.v20130422-1538.jar

我在 PreferencePage 类中做了什么:

public class PaketFilterPreferencePage extends PreferencePage {

public static final int ALL_PACKETS_SELECTED = 1;
public static final int FILTER_DECODER = 2;
public static final int ALL_DECODER = 0;
public static final String PKFILTER_PREF = "PaketFilterDecoderPref";
public static final String PKFILTER_NODE = "PaketFilterDecoderNode";
...
private void initButtons(){
IPreferenceStore preferenceStore = getPreferenceStore();
int pref = preferenceStore.getInt(PKFILTER_PREF);
if(pref==ALL_PACKETS_SELECTED){
selectAllPacketsButton.setSelection(true);
ctv.getTable().setEnabled(false);
if(selectAllDecoderButton!=null){
selectAllDecoderButton.setEnabled(false);
unselectAllButton.setEnabled(false);
}
}
else
selectFilterButton.setSelection(true);
}

@Override
protected void performDefaults() {
IPreferenceStore preferenceStore = getPreferenceStore();
preferenceStore.setValue(PKFILTER_PREF, ALL_DECODER);
initButtons();

}

@Override
public boolean performOk() {
IPreferenceStore preferenceStore = getPreferenceStore();
if(selectAllPacketsButton.getSelection())
preferenceStore.setValue(PKFILTER_PREF, ALL_PACKETS_SELECTED);
else if(decoderNamesCurrentCopy.equals(decoderNamesAll))
preferenceStore.setValue(PKFILTER_PREF, ALL_DECODER);
else
preferenceStore.setValue(PKFILTER_PREF, FILTER_DECODER);
return true;
}
}

打电话

setPreferenceStore(Activator.getDefault().getPreferenceStore());

在我的 PreferencePage 的构造函数中给我一个空指针。我将这一行添加到我的 list 中

Bundle-Activator: xxx.Activator

我还添加了扩展 org.eclipse.core.runtime.preferences 并将其连接到此类:

 public class AbstractPreferenceInit extends
AbstractPreferenceInitializer {

public AbstractPreferenceInit() {
// TODO Auto-generated constructor stub
}

@Override
public void initializeDefaultPreferences() {
IEclipsePreferences node = DefaultScope.INSTANCE.getNode(PaketFilterPreferencePage.PKFILTER_NODE);
node.putBoolean(PaketFilterPreferencePage.PKFILTER_ALL_PACKETS_RADIO, false);
node.putInt(PaketFilterPreferencePage.PKFILTER_STATUS, PaketFilterPreferencePage.ALL_DECODER);
}
}

最佳答案

您应该为您的插件使用激活器而不是偏好插件。如果您的激活器扩展 AbstractUIPlugin,它将有一个 getPreferenceStore() 方法。

你的偏好页面需要调用

setPreferenceStore(Activator.getDefault().getPreferenceStore());

在初始化期间(通常在构造函数中)。

您可能还想使用 org.eclipse.core.runtime.preferences 扩展点来定义首选项初始化程序以确保首选项始终具有值。

更新:示例激活器

public class Activator extends AbstractUIPlugin {
private static Activator plugin;

public Activator() {
}

@Override
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}

@Override
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}

public static Activator getDefault() {
return plugin;
}
}

关于view - Eclipse 插件从 ViewPart 访问首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23558402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com