java - Eclipse:以编程方式创建首选项页面

标签 java eclipse eclipse-rcp preferences

我正在尝试以编程方式创建首选项页面,我需要在不在 plugin.xml 中定义 preferencePage 扩展点的情况下使用首选项页面 我非常接近解决方案,我能够在应用程序第一次加载时加载页面并保存值,

我的代码的核心是

PreferenceManager pmngr= PlatformUI.getWorkbench().getPreferenceManager();
 //this come from other plugins that implements my personal IPreferences 
    PreferencePageRCP page =new PreferencePageRCP((IPreferences) element.createExecutableExtension("class"));

    PreferenceNodeRCP node= new PreferenceNodeRCP(page.getId(), page.getTitle(),null,PreferencePageRCP.class.getName());

    node.setPage(page);
     pmngr.addToRoot(node);

PreferencePageRCP 是我的自定义 PreferencePage,所以此时我的 PreferencePage 可以正常工作!!!

但是当我第二次进入首选项窗口时,我在 PreferenceNode.createPage 上遇到了一个错误,所以现在我做了我自己的 PreferenceNode 类来覆盖 createPage,但现在我遇到了一个 UI 错误

Problems occurred when invoking code from plug-in: "org.eclipse.jface".
!STACK 0
org.eclipse.swt.SWTException: Widget is disposed
 at org.eclipse.swt.SWT.error(SWT.java:4083)
 at org.eclipse.swt.SWT.error(SWT.java:3998)
 at org.eclipse.swt.SWT.error(SWT.java:3969)
 at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
 at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
 at org.eclipse.swt.widgets.Control.setVisible(Control.java:3370)
 at org.eclipse.jface.dialogs.DialogPage.setVisible(DialogPage.java:470)
 at org.eclipse.jface.preference.FieldEditorPreferencePage.setVisible(FieldEditorPreferencePage.java:374)
 at org.eclipse.jface.preference.PreferenceDialog.showPage(PreferenceDialog.java:1323)
 at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.showPage(FilteredPreferenceDialog.java:673)
 at org.eclipse.jface.preference.PreferenceDialog$10.run(PreferenceDialog.java:708)
 at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
 andContributionItem.java:796
.................

所以第二次 UI 中缺少一些东西 我此时无法修复我的代码,有人成功地以编程方式创建首选项页面???

最佳答案

这是 java 代码,它允许以编程方式创建首选项页面:


//create an instance of the custom MyPreference class
IPreferencePage page = new MyPreference(); 
page.setTitle("Custom Configurations");<p></p>

<p>//create a new PreferenceNode that will appear in the Preference window
PreferenceNode node = new PreferenceNode("1", page);</p>

<p>//use workbenches's preference manager
PreferenceManager pm= PlatformUI.getWorkbench().getPreferenceManager();</p>

<p>pm.addToRoot(node); //add the node in the PreferenceManager</p>

<p>Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();</p>

<p>//instantiate the PreferenceDialog
PreferenceDialog pd = new PreferenceDialog(shell, pm); </p>

<p>//this line is important, it tell's the PreferenceDialog which preference-store it should write to
pd.setPreferenceStore(Activator.getDefault().getPreferenceStore());
pd.create();
pd.open();</p>

<p></p>

关于java - Eclipse:以编程方式创建首选项页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4017001/

相关文章:

java - 如何向所有打开的编辑器添加鼠标监听器?

java - FileInputStream 找不到文件

java - 为什么我的程序在 eclipse 中可以运行,但在使用 maven 进行 jar 时会生成 "filename, directory name, or volume label syntax is incorrect"错误?

java - 哪些字符串是空的?

android - Eclipse for Android 中的界面生成器 : how to see my activity in fullscreen?

java - JCO_ERROR_RESOURCE : Destination does not exist

java - Eclipse RCP- 仅文件夹的属性页

java - 使用 freemarker 发送消息

eclipse - 我需要 JDK 才能与 Eclipse Helios 和 Tomcat 7.0.33 一起使用吗?

java - 在 Eclipse 中向 Project Explorer 添加过滤器