我正在尝试以编程方式创建首选项页面,我需要使用首选项页面而不在plugin.xml 中定义首选项页面扩展点
我非常接近解决方案,我能够加载页面并在应用程序第一次加载时保存值,
我的代码的核心是
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 正在工作!
但是当我第二次进入首选项窗口时,我在 Preference Node.createPage 上遇到了错误,所以现在我做了自己的 Preference Node 类覆盖 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");
//创建一个新的PreferenceNode,它将出现在Preference窗口中
PreferenceNode 节点 = new PreferenceNode("1", 页);
//使用工作台的首选项管理器
PreferenceManager pm= PlatformUI.getWorkbench().getPreferenceManager();
pm.addToRoot(节点); //在PreferenceManager中添加节点
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
//实例化首选项对话框
PreferenceDialog pd = new PreferenceDialog(shell, pm);
//这一行很重要,它告诉 PreferenceDialog 应该写入哪个首选项存储
pd.setPreferenceStore(Activator.getDefault().getPreferenceStore());
pd.create();
pd.open();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)