【问题标题】:Eclipse project property/preference page: How to find event of opening preference page in project property window(Eclipse)Eclipse 项目属性/首选项页面:如何在项目属性窗口中找到打开首选项页面的事件(Eclipse)
【发布时间】:2013-10-24 17:00:48
【问题描述】:

我想在页面打开时在首选项页面上初始化一些字段值 我希望每次页面在项目属性窗口(Eclipse)中打开。

【问题讨论】:

  • 这是您正在创建的首选项页面还是现有插件中的页面?
  • 我没有使用现有的偏好页面,我正在创建一个新的偏好页面。基本上我希望我的首选项页面使用首选项存储进行更新,我试图通过属性更改侦听器来实现,但我得到 org.eclipse.swt.SWTException: Widget is disposed exception

标签: java eclipse eclipse-plugin swt


【解决方案1】:

尝试实现一个属性更改监听器。

这可能会有所帮助-

public class MyFieldEditorPreferencePage extends PropertyPage {
private Text text;

public void initialize() {
    // TODO Auto-generated constructor stub
    IProject project = (IProject) getElement().getAdapter(IProject.class);

    final IPreferenceStore store = Activator
            .getImpaktPreferenceStore(project);

    store.addPropertyChangeListener(new IPropertyChangeListener() {

        @Override
        public void propertyChange(
                org.eclipse.jface.util.PropertyChangeEvent event) {
            // TODO Auto-generated method stub

            // TODO Auto-generated method stub

            if (text != null && !text.isDisposed())
                text.setText(store.getString("key"));

        }
    });

    setPreferenceStore(store);

}

@Override
protected Control createContents(Composite parent) {
    // TODO Auto-generated method stub

    initialize();
    GridLayout layout = new GridLayout(1, false);
    parent.setLayout(layout);
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);

    Composite container = new Composite(parent, 0);
    container.setLayoutData(gridData);

    GridLayout containerLayout = new GridLayout(2, false);
    container.setLayout(containerLayout);
    Label lbl = new Label(container, 0);
    lbl.setText("Locale");

    text = new Text(container, SWT.BORDER);
    text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

    text.setText(getPreferenceStore().getString("impakt.properties.locale"));

    return parent;
}

}

【讨论】:

    【解决方案2】:

    org.eclipse.jface.preference.PreferencePage 有一个 setPreferenceStore 方法,你应该在你的偏好页面构造函数中调用它。指定的首选项存储通常来自插件激活器,例如来自比较插件首选项的示例:

    setPreferenceStore(CompareUIPlugin.getDefault().getPreferenceStore());
    

    有一个getPreferenceStore() 方法可以调用来访问这个商店。

    如果您想在每次页面可见时收到通知,请覆盖 public void setVisible(boolean visible)

    【讨论】:

    • 但是当页面第一次打开时,构造函数只会被调用一次。所以我想每次打开页面时都会触发一些事件,然后相应的字段将从首选项存储中更新。
    • 每次显示首选项对话框时都会构建页面。
    • 但在我的情况下,首选项页面依赖于另一个页面,因此构造函数将不起作用,因为它只会在首选项对话框关闭然后再次打开后调用。
    • 好的,添加setVisible回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多