如何在 Eclipse 中保存编辑器状态
How to save an editor state in eclipse
我创建了一个从视图中打开的编辑器。
更具体地说,我创建了一个扩展 EditorPart
的编辑器 class 和一个扩展 IEditorInput
的编辑器输入。我还创建了一个视图,如果您双击视图中的一个元素,编辑器就会打开。编辑器只是简单地展示了一棵树。
一切正常。我需要做的是,当我改变它时保存编辑器的状态,例如当我向树中添加一个 treeItem 时。
我读过一些教程,但大多数教程都解释了如何使用纪念品保存视图状态。我是 Eclipse 开发的新手,所以请多多包涵 :P
如果您没有要保存的文件,您可以将插件的数据放入 'state location' - 这是您的插件可以使用的工作区 .metadata/.plugins 目录中的一个文件夹随便你。
您使用以下方法获取州位置:
Bundle bundle = Platform.getBundle("your plugin id");
IPath stateLoc = Platform.getStateLocation(bundle);
注意:有几种方法可以得到Bundle
,例如你也可以使用:
Bundle bundle = FrameworkUtil.getBundle(getClass());
哪个 returns 当前 class 的捆绑包。
您可以以您喜欢的任何格式保存/恢复您的文件。您提到了 Memento 格式。写一个纪念品使用:
XMLMemento memento = XMLMemento.createWriteRoot("root");
... add your entries
try (Writer writer = new OutputStreamWriter(new FileOutputStream("file name"), StandardCharsets.UTF_8))
{
memento.save(writer);
}
阅读带有类似内容的纪念品:
try (Reader reader = new InputStreamReader(new FileInputStream("file name"), StandardCharsets.UTF_8))
{
IMemento memento = XMLMemento.createReadRoot(reader);
... read the memento contents
}
我创建了一个从视图中打开的编辑器。
更具体地说,我创建了一个扩展 EditorPart
的编辑器 class 和一个扩展 IEditorInput
的编辑器输入。我还创建了一个视图,如果您双击视图中的一个元素,编辑器就会打开。编辑器只是简单地展示了一棵树。
一切正常。我需要做的是,当我改变它时保存编辑器的状态,例如当我向树中添加一个 treeItem 时。
我读过一些教程,但大多数教程都解释了如何使用纪念品保存视图状态。我是 Eclipse 开发的新手,所以请多多包涵 :P
如果您没有要保存的文件,您可以将插件的数据放入 'state location' - 这是您的插件可以使用的工作区 .metadata/.plugins 目录中的一个文件夹随便你。
您使用以下方法获取州位置:
Bundle bundle = Platform.getBundle("your plugin id");
IPath stateLoc = Platform.getStateLocation(bundle);
注意:有几种方法可以得到Bundle
,例如你也可以使用:
Bundle bundle = FrameworkUtil.getBundle(getClass());
哪个 returns 当前 class 的捆绑包。
您可以以您喜欢的任何格式保存/恢复您的文件。您提到了 Memento 格式。写一个纪念品使用:
XMLMemento memento = XMLMemento.createWriteRoot("root");
... add your entries
try (Writer writer = new OutputStreamWriter(new FileOutputStream("file name"), StandardCharsets.UTF_8))
{
memento.save(writer);
}
阅读带有类似内容的纪念品:
try (Reader reader = new InputStreamReader(new FileInputStream("file name"), StandardCharsets.UTF_8))
{
IMemento memento = XMLMemento.createReadRoot(reader);
... read the memento contents
}