我有 Eclipse RCP 应用程序。我自己的IntroPart
扩展org.eclipse.ui.part.IntroPart
。
通过继承我得到了这个方法:
@Override
public void saveState(IMemento memento) {
}
这里说明当工作台关闭时,saveState
在所有打开的视图上调用该方法。但这只有在我关闭整个应用程序时才是真的。
如果我只关闭这个页面而不是洞应用程序,我应该怎么做才能保存介绍页面状态?
我有 Eclipse RCP 应用程序。我自己的IntroPart
扩展org.eclipse.ui.part.IntroPart
。
通过继承我得到了这个方法:
@Override
public void saveState(IMemento memento) {
}
这里说明当工作台关闭时,saveState
在所有打开的视图上调用该方法。但这只有在我关闭整个应用程序时才是真的。
如果我只关闭这个页面而不是洞应用程序,我应该怎么做才能保存介绍页面状态?
您指向常见问题解答的链接回答:
保持视图状态的另一种机制是 JFace IDialogSettings 工具。对话框设置优于视图保存/初始化机制的优点是您可以控制设置何时保留。
这是一个关于如何使用 IDialogSettings 在 IntroPart 关闭时保持其状态以及如何在创建时恢复它的示例。MyIntroPart 是具有Text
小部件的 IntroPart。显示的文本在 IntroPart 关闭时保存并在创建时恢复。
为了获得该partClosed
事件,MyIntroPart 实现 IPartListener2 并将自身注册到 PartService。
private static final String MY_INTRO_SETTINGS = "my_intro_settings";
private static final String MY_INTRO_TEXT_KEY = "my_intro_text";
@Override
public void createPartControl(Composite parent) {
this.text = new Text(parent, SWT.BORDER);
// try to load the settings
IDialogSettings settings = Activator.getDefault().getDialogSettings();
IDialogSettings section = settings.getSection(MyIntroPart.MY_INTRO_SETTINGS);
if (section != null) {
// set the restored text string in the text widget
this.text.setText(section.get(MyIntroPart.MY_INTRO_TEXT_KEY));
}
// register the part listener
getIntroSite().getWorkbenchWindow().getPartService().addPartListener(this);
}
这会将文本恢复到文本小部件。
MyIntroPart 实现partClosed
IPartListener2 以在视图关闭时保存对话框设置:
@Override
public void partClosed(IWorkbenchPartReference partRef) {
// remove part listener from part service
getIntroSite().getWorkbenchWindow().getPartService().removePartListener(this);
IDialogSettings settings = Activator.getDefault().getDialogSettings();
// get the section of the text
IDialogSettings section = settings.getSection(MyIntroPart.MY_INTRO_SETTINGS);
// if it doesn't exist, create it
if (section == null) {
section = settings.addNewSection(MyIntroPart.MY_INTRO_SETTINGS);
}
// put text from text field in section
section.put(MyIntroPart.MY_INTRO_TEXT_KEY, this.text.getText());
}
感谢 fredrik 指出此处不需要从文件加载或保存到文件。