java - 保存关闭/打开介绍部分之间的状态

标签 java eclipse eclipse-plugin eclipse-rcp

我有 Eclipse RCP 应用程序。我自己的 IntroPart 扩展了 org.eclipse.ui.part.IntroPart

通过继承我得到了这个方法:

@Override
public void saveState(IMemento memento) {
}

Here据称,当工作台关闭时,将在所有打开的 View 上调用方法 saveState 。但只有当我关闭整个应用程序时,这才是正确的。

如果我只关闭此页面而不关闭洞应用程序,我应该怎么做才能保存之前的介绍页面状态?

最佳答案

您的link常见问题解答的答案是:

Another mechanism for persisting view state is the JFace IDialogSettings facility. The advantage of dialog settings over the view save/init mechanism is that you can control when settings are persisted.

此示例说明如何使用 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 实现 IPartListener2 的 partClosed 以在 View 关闭时保存对话框设置:

@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 指出此处不需要加载或保存到文件。

关于java - 保存关闭/打开介绍部分之间的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744145/

相关文章:

java - Java 中的 Windows 资源管理器上下文菜单

database - Eclipse 的开源数据库插件?

eclipse-plugin - 如何将 jar 非 osgi jar 文件添加为 eclipse 插件的依赖项?

Java - 部分修改文件

java - 方向 vector 的旋转矩阵

java - 为什么我使用 datainputstream、java、android 时会得到 0kb 文件?

java - 向 Sonarqube 添加 Java 代码格式化规则

java - 如何将 SWT Spy 用于 SWT 应用程序?

eclipse-plugin - 在 Eclipse RCP 中以编程方式修改命令标签

java - Eclipse:设置操作的悬停图像