为RCP的XML编辑器创建OutlinePage 2007.12.12阅读(187)下一篇:CCTV,你让我怎么... |返回日志列表 赞赞赞取消赞转载分享评论(7)复制地址更多
这两天所做的RCP项目需要实现XMLEditor的Outline同步显示。
查了古今中外的资料也没发现一篇真正有用的教程。
所以在解决问题后记录下来,以供有需要的朋友参考。
效果如图所示
完成此项任务,我们需要编写以下几个Class:
1、XMLEditor:extends TextEditor
2、XMLContentOutlinePage:extends ContentOutlinePage
3、OutlineContentProvider:implements ITreeContentProvider
4、OutlineLabelProvider:extends LabelProvider
其中2、3、4为1的innerClass。
Step1:创建Editor。
如何创建没啥好说的,地球人都知道。
这里就说两个和outlinePage有关的接口。
1、
public Object getAdapter(Class key) {
if (key.equals(IContentOutlinePage.class)) {
IEditorInput input = getEditorInput();
if (input instanceof IFileEditorInput) {
if (outlinePage == null)
outlinePage = new XMLContentOutlinePage(input);
return outlinePage;
}
}
return super.getAdapter(key);
}
2、在编辑了XMLEditor内容后需要更新一次我们的outlinePage,所以重写了editorSaved方法。
public void editorSaved() {
if (outlinePage != null)
outlinePage.update();
}
Step2:创建XMLContentOutlinePage。
class XMLContentOutlinePage extends ContentOutlinePage {
protected IEditorInput input;
public XMLContentOutlinePage(IEditorInput input) {
super();
this.input = input;
}
public void update() {
TreeViewer viewer = (TreeViewer) getTreeViewer();
if (viewer != null) {
Control control = viewer.getControl();
if (control != null && !control.isDisposed()) {
control.setRedraw(false);
viewer.setInput(input);
viewer.expandAll();
control.setRedraw(true);
}
}
}
public void createControl(Composite parent) {
super.createControl(parent);
TreeViewer viewer = (TreeViewer) getTreeViewer();
viewer.setContentProvider(new OutlineContentProvider());
viewer.setLabelProvider(new OutlineLabelProvider());
viewer.setInput(input);
viewer.expandAll();
}
}
Step3:创建OutlineContentProvider。
这里实现了inputChanged方法,用于将Editor中的现有XMLString转换为相应的DOM
中间绿色的部分依据你使用的DOM类型不同会有不同的实现方式
我这里使用DOM4J来处理XMLEditor的文本内容
class OutlineContentProvider implements ITreeContentProvider {
IEditorInput input;
Document doc;
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
input = (IEditorInput) newInput;
if (newInput != null) {
IDocument document = getDocumentProvider().getDocument(newInput);
if (document != null) {
try {
doc = DocumentHelper.parseText(document.get());
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
}
public Object[] getChildren(Object parentElement) {
Element el = (Element) parentElement;
return el.elements().toArray();
}
public Object getParent(Object element) {
Element el = (Element) element;
return el.getParent();
}
public boolean hasChildren(Object element) {
Element el = (Element) element;
return el.elements() != null;
}
public Object[] getElements(Object inputElement) {
//在inputChanged得到新的DOM树以后ECP框架会首先调用此函数,用于获取DOM树的根节点
//上面的三个函数用于实现子节点们的递归
return doc.getRootElement().elements().toArray();
}
public void dispose() {
}
}
Step4:创建OutlineLabelProvider。
这个是最简单,但也是不可缺少的一部分。
content节点们在树里面会显示成什么样全靠它咯。
偷个懒,让它直接继承LabelProvider吧。
class OutlineLabelProvider extends LabelProvider {
@Override
public String getText(Object element) {
//这里以Element的tagName为名显示在outline内
//如果你愿意,大可使用当前element的任何属性作为它在outline中的名字
Element el = (Element) element;
return el.getName();
}
}
这样就算大功告成了。
目前还没有实现outline与XMLEditor的反向绑定。
就是说在选择outline中的节点时,编辑器的内容还不会自动跳转到相应位置。
觉得有帮助的话,麻烦顶一下。
分享到:
相关推荐
创建Eclipse RCP属性编辑器主要涉及以下几个步骤: 1. **定义属性页(Property Page)**:首先,你需要定义一个继承自`org.eclipse.ui.propertyPages.PropertyPage`的类,这个类将作为属性编辑器的主体。在这个类中...
要为编辑器添加菜单项和工具栏按钮,我们需要扩展`org.eclipse.ui.menus`和`org.eclipse.ui.toolbars`点。这样可以添加如“新建”、“打开”、“保存”等标准操作,并与编辑器的业务逻辑关联起来。 7. **测试和...
开发Eclipse RCP编辑器的第一步是创建一个新的Eclipse插件项目。在Eclipse IDE中,可以通过"File" -> "New" -> "Plug-in Project"来实现。在此过程中,你需要为项目命名,选择模板,并配置项目的依赖。确保选中"Plug...
3. **创建工具栏(Creating the Toolbar)**:在工作台的视图或编辑器中,通过`IToolBarManager`接口创建工具栏实例,并添加到相应的视图或编辑器上。 4. **添加按钮(Adding Buttons)**:利用`IToolItem`类,为每...
这个框架基于Java,提供了一套完整的工具集,包括插件系统、工作台管理、视图、编辑器、透视图等,使得开发者可以快速、灵活地创建功能丰富的应用程序。 在“Eclipse RCP 例子程序”中,我们可能找到一系列的示例...
RCP 应用程序可以利用 Eclipse 的工作台(Workbench)、视图(Views)、编辑器(Editors)和透视图(Perspectives)等核心组件,构建出功能强大且用户友好的界面。 **2. RCP应用的基本元素** - **工作台(Workbench...
视图和编辑器是 RCP 应用中展示数据和执行操作的主要组件。视图通常用于显示辅助信息,而编辑器用于处理和编辑主要内容。开发者可以自定义视图和编辑器,实现特定的用户界面和功能。 **6. 对话框(Dialogs)** ...
### Eclipse RCP 详细教程 #### 1. 富客户端平台 ##### 1.1....Eclipse RCP(Rich Client Platform)是...后续章节将继续深入探讨更多高级主题和技术细节,包括如何添加组合键、系统托盘、外观设计、与编辑器交互等内容。
11. **插件开发**:开发Eclipse RCP应用涉及创建插件项目、定义插件依赖、编写插件XML配置文件,以及实现具体业务逻辑。 12. **调试与测试**:Eclipse RCP提供强大的调试工具,如插件调试器,可以帮助开发者定位和...
创建编辑器需要定义编辑器的类,并实现必要的接口方法来处理数据。视图和编辑器之间可以通过共享模型进行交互,这意味着数据的变化可以立即反映在多个组件中。此外,还需要实现内容提供者和标签提供者来控制视图和...
在Eclipse RCP中,开发者可以利用工作台(Workbench)、视图(View)、编辑器(Editor)、透视图(Perspective)等核心组件来构建复杂的用户界面。工作台是整个应用程序的中心,负责管理视图和编辑器;视图是显示...
- **Plugin.xml**:定义插件元数据,包括视图、编辑器、菜单和命令的声明。 - **.product**文件:产品配置,描述应用的结构和启动参数。 - **Java源代码**:实现视图、编辑器和其他业务逻辑的类。 - **Manifest.MF**...
`plugin.xml`配置文件是Eclipse插件的核心,它包含了插件的元数据、视图、编辑器、命令、快捷键、菜单和工具栏的定义。 3. **plugin.xml配置**:在`plugin.xml`文件中,开发者可以使用XML语法来声明菜单和工具栏。...
- **配置RCP应用**:插件清单编辑器提供了一个图形化界面来配置RCP应用的各种属性。 - **运行预览**:在插件清单编辑器的Overview页面中,可以通过点击“Launch Eclipse application”链接来预览RCP应用的运行效果。...
除了基本文本编辑器之外,还可以创建特定类型的编辑器,如图像编辑器、模型编辑器等。 ##### Help 帮助系统是 Eclipse RCP 的一个重要组成部分。它允许开发者提供上下文相关的帮助文档,以指导用户如何使用应用...
5. **编辑器(Editor)**:编辑器是RCP中处理数据的核心组件,类似于IDE中的源代码编辑器。学习如何创建自定义编辑器,处理模型数据,以及与视图交互。 6. **命令(Command)与快捷键(Key Binding)**:Eclipse ...
例如,`org.eclipse.ui.editors`扩展点用于声明新的编辑器,开发者需要在`plugin.xml`文件中配置相关信息。 8. **测试(Testing)**:对于Eclipse插件,可以使用PDE Test工具进行单元测试和集成测试。测试代码通常...
学习如何创建自定义视图和编辑器,以及它们之间的交互,是Eclipse RCP开发的重要环节。 5. **服务和事件模型**:Eclipse RCP使用服务导向的架构,允许插件之间通过服务接口进行通信。同时,事件模型使得插件可以...