java - 如何使用 Eclipse 文本编辑器将字符串显示/编辑/保存到 RCP 应用程序中?
问题描述
我正在开发一个 Eclipse 4 RCP 应用程序。我对某些部分和编辑有一个看法。编辑器的目的是打开、编辑和保存一个字符串。
如何打开将字符串作为输入的编辑器?大多数
IDE.openEditor(...)
实现都将 IFile 作为输入,但我不想使用文件作为中介。编辑完编辑器的内容后,如何保存成字符串?使用文件时,编辑器将其内容直接保存到文件中。
解决方案
我想到了。通过Rüdiger Herrmann和greg-449,我能够构建这个原型。
class StringEditorInput implements IStorageEditorInput {
private IStorage storage;
public StringEditorInput(IStorage storage) {
this.storage = Objects.requireNonNull(storage, "Storage object cannot be null.");
}
@Override
public boolean exists() {
return true;
}
@Override
public IStorage getStorage() throws CoreException {
return storage;
}
/* Uninteresting methods left out for brevity */
}
class StringStorage implements IStorage {
private String content;
public StringStorage(String content) {
this.content = Objects.requireNonNull(content, "The new content string cannot be null.");
}
@Override
public InputStream getContents() throws CoreException {
return new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
}
/* Uninteresting methods left out for brevity */
}
/**
* Set the text in the PDDL editor.
*
* @param text
* PDDL code to show in the editor.
*/
public void setEditorText(String text) {
String editorId = "pl.poznan.put.cs.gui4pddl.PDDLEditor";
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
editor = IDE.openEditor(page, new StringEditorInput(new StringStorage(text)), editorId);
} catch (PartInitException e) {
e.printStackTrace();
}
}
/**
* Get the text currently displayed in the PDDL editor.
*
* @return PDDL code.
*/
public String getEditorText() {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
page.saveEditor(editor, false);
String editorText = "";
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IDocumentProvider provider = textEditor.getDocumentProvider();
IEditorInput input = editor.getEditorInput();
IDocument document = provider.getDocument(input);
editorText = document.get();
}
return editorText;
}
请注意,setEditorText(String text)
并getEditorText()
以某种方式连接到我的 RCP 应用程序中的打开和保存按钮。
推荐阅读
- php - 无法在php中同时复制多个大文件
- python - 在 Python 中绘制轨道,但是当 x<0 时,轨迹突然变为线性
- sql - 如何为数据库中的所有表返回不同的变量计数?
- java - 类型参数“S”的推断类型“S”不在其范围内;应该扩展'ua.com.store.entity.Country
- php - 使用带有 wordpress 的 php 请求
- asp.net - 如何在单选按钮列表中添加复选框元素
- android - 将 Hotmail (Outlook.com) 日历同步到 Google Android 日历应用?
- java - 在 jFreeChart 中的图例符号上设置前景 alpha
- c++ - C++11 移至本地 const 引用:范围
- vb.net - 从动态创建的文本框中读取数据