- 浏览: 990767 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个wsdl 地址 可以访问?
[CXF] Server与Client实现方式五:HTTPS -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
[CXF] Server与Client实现方式四:JMS -
dengmiao:
JAXB学习三 (验证) -
panamera:
你好。可以提供maven pom配置是怎么配置的?不知道你使用 ...
[CXF] Server与Client实现方式四:JMS -
u010221220:
请问楼主一二三部分的代码都应该放在哪个函数体中。
使用JDI监听Java程序运行
5. Zest和JFace的例子
5.1 创建工程
创建一个RCP应用"de.vogella.zest.jface",使用"RCP Application with a view"做为模板。增加zest的依赖项。修改Pespective.java如下:
package de.vogella.zest.jface; import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPerspectiveFactory; public class Perspective implements IPerspectiveFactory { public void createInitialLayout(IPageLayout layout) { String editorArea = layout.getEditorArea(); layout.setEditorAreaVisible(false); layout.setFixed(true); layout.addView(View.ID, IPageLayout.LEFT, 1.0f, editorArea); }
}
5.2 模型
创建以下模型:
package de.vogella.zest.jface.model; import java.util.ArrayList; import java.util.List; public class MyNode { private final String id; private final String name; private List<MyNode> connections; public MyNode(String id, String name) { this.id = id; this.name = name; this.connections = new ArrayList<MyNode>(); } public String getId() { return id; } public String getName() { return name; } public List<MyNode> getConnectedTo() { return connections; } }
package de.vogella.zest.jface.model;
public class MyConnection { final String id; final String label; final MyNode source; final MyNode destination; public MyConnection(String id, String label, MyNode source, MyNode destination) { this.id = id; this.label = label; this.source = source; this.destination = destination; } public String getLabel() { return label; } public MyNode getSource() { return source; } public MyNode getDestination() { return destination; } }
package de.vogella.zest.jface.model;
import java.util.ArrayList; import java.util.List; public class NodeModelContentProvider { private List<MyConnection> connections; private List<MyNode> nodes; public NodeModelContentProvider() { // Image here a fancy DB access // Now create a few nodes nodes = new ArrayList<MyNode>(); MyNode node = new MyNode("1", "Hamburg"); nodes.add(node); node = new MyNode("2", "Frankfurt"); nodes.add(node); node = new MyNode("3", "Berlin"); nodes.add(node); node = new MyNode("4", "Munich"); nodes.add(node); node = new MyNode("5", "Eppelheim"); nodes.add(node); node = new MyNode("6", "Ahrensboek"); nodes.add(node); connections = new ArrayList<MyConnection>(); MyConnection connect = new MyConnection("1", "1", nodes.get(0), nodes.get(1)); connections.add(connect); connect = new MyConnection("2", "2", nodes.get(0), nodes.get(4)); connections.add(connect); connect = new MyConnection("3", "3", nodes.get(2), nodes.get(1)); connections.add(connect); connect = new MyConnection("4", "3", nodes.get(1), nodes.get(3)); connections.add(connect); // Because we are lasy we save the info about the connections in the // nodes for (MyConnection connection : connections) { connection.getSource().getConnectedTo() .add(connection.getDestination()); } } public List<MyNode> getNodes() { return nodes; }}
5.3 providers
创建以下content和label providers
package de.vogella.zest.jface.zestviewer; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.zest.core.viewers.IGraphEntityContentProvider; import de.vogella.zest.jface.model.MyNode; public class ZestNodeContentProvider extends ArrayContentProvider implements IGraphEntityContentProvider { @Override public Object[] getConnectedTo(Object entity) { if (entity instanceof MyNode) { MyNode node = (MyNode) entity; return node.getConnectedTo().toArray(); } throw new RuntimeException("Type not supported"); } }
package de.vogella.zest.jface.zestviewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.zest.core.viewers.EntityConnectionData;
import de.vogella.zest.jface.model.MyConnection;
import de.vogella.zest.jface.model.MyNode;
public class ZestLabelProvider extends LabelProvider {
@Override
public String getText(Object element) {
if (element instanceof MyNode) {
MyNode myNode = (MyNode) element;
return myNode.getName();
}
// Not called with the IGraphEntityContentProvider
if (element instanceof MyConnection) {
MyConnection myConnection = (MyConnection) element;
return myConnection.getLabel();
}
if (element instanceof EntityConnectionData) {
EntityConnectionData test = (EntityConnectionData) element;
return "";
}
throw new RuntimeException("Wrong type: "
+ element.getClass().toString());
}
}
5.4 view
修改view如下:
package de.vogella.zest.jface; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IActionBars; import org.eclipse.ui.part.ViewPart; import org.eclipse.zest.core.viewers.AbstractZoomableViewer; import org.eclipse.zest.core.viewers.GraphViewer; import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart; import org.eclipse.zest.core.viewers.ZoomContributionViewItem; import org.eclipse.zest.layouts.LayoutAlgorithm; import org.eclipse.zest.layouts.LayoutStyles; import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm; import de.vogella.zest.jface.model.NodeModelContentProvider; import de.vogella.zest.jface.zestviewer.ZestLabelProvider; import de.vogella.zest.jface.zestviewer.ZestNodeContentProvider; public class View extends ViewPart implements IZoomableWorkbenchPart { public static final String ID = "de.vogella.zest.jface.view"; private GraphViewer viewer; public void createPartControl(Composite parent) { viewer = new GraphViewer(parent, SWT.BORDER); viewer.setContentProvider(new ZestNodeContentProvider()); viewer.setLabelProvider(new ZestLabelProvider()); NodeModelContentProvider model = new NodeModelContentProvider(); viewer.setInput(model.getNodes()); LayoutAlgorithm layout = setLayout(); viewer.setLayoutAlgorithm(layout, true); viewer.applyLayout(); fillToolBar(); } private LayoutAlgorithm setLayout() { LayoutAlgorithm layout; // layout = new // SpringLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); layout = new TreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); // layout = new // GridLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); // layout = new // HorizontalTreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); // layout = new // RadialLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); return layout; } /** * Passing the focus request to the viewer's control. */ public void setFocus() { } private void fillToolBar() { ZoomContributionViewItem toolbarZoomContributionViewItem = new ZoomContributionViewItem( this); IActionBars bars = getViewSite().getActionBars(); bars.getMenuManager().add(toolbarZoomContributionViewItem); } @Override public AbstractZoomableViewer getZoomableViewer() { return viewer; } }
最后结果如下:
5.5 Filter
可以通过setFilter()来定义一个filter,例如:
package de.vogella.zest.jface.zestviewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import de.vogella.zest.jface.model.MyNode; public class NodeFilter extends ViewerFilter { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof MyNode) { MyNode node = (MyNode) element; return node.getName().toLowerCase().contains("a"); } return true; } }
把这个filter用在所有元素上:
package de.vogella.zest.jface; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IActionBars; import org.eclipse.ui.part.ViewPart; import org.eclipse.zest.core.viewers.AbstractZoomableViewer; import org.eclipse.zest.core.viewers.GraphViewer; import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart; import org.eclipse.zest.core.viewers.ZoomContributionViewItem; import org.eclipse.zest.layouts.LayoutAlgorithm; import org.eclipse.zest.layouts.LayoutStyles; import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm; import de.vogella.zest.jface.model.NodeModelContentProvider; import de.vogella.zest.jface.zestviewer.NodeFilter; import de.vogella.zest.jface.zestviewer.ZestLabelProvider; import de.vogella.zest.jface.zestviewer.ZestNodeContentProvider; public class View extends ViewPart implements IZoomableWorkbenchPart { public static final String ID = "de.vogella.zest.jface.view"; private GraphViewer viewer; public void createPartControl(Composite parent) { viewer = new GraphViewer(parent, SWT.BORDER); viewer.setContentProvider(new ZestNodeContentProvider()); viewer.setLabelProvider(new ZestLabelProvider()); NodeModelContentProvider model = new NodeModelContentProvider(); viewer.setInput(model.getNodes()); LayoutAlgorithm layout = setLayout(); viewer.setLayoutAlgorithm(layout, true); viewer.applyLayout(); NodeFilter filter = new NodeFilter(); ViewerFilter[] filters = new ViewerFilter[1]; filters[0]= filter; viewer.setFilters(filters); fillToolBar(); } private LayoutAlgorithm setLayout(){ LayoutAlgorithm layout; // layout = new SpringLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); layout = new TreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); // layout = new GridLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); // layout = new HorizontalTreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); // layout = new RadialLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING); return layout; } /** * Passing the focus request to the viewer's control. */ public void setFocus() { } private void fillToolBar() { ZoomContributionViewItem toolbarZoomContributionViewItem = new ZoomContributionViewItem(this); IActionBars bars = getViewSite().getActionBars(); bars.getMenuManager().add(toolbarZoomContributionViewItem); } @Override public AbstractZoomableViewer getZoomableViewer() { return viewer; } }
注:也可以在layout上注册filter,这样在计算布局的时候,特定的元素会被忽略。方法isObjectFiltered()。使用item.getGraphData()去得到底层的object对象。
6. 技巧和提示
6.1 使用结点不可移动
缺省情况下节点都可以移动,要禁用,可以如下实现:
package de.vogella.zest.movenodes.graph; import org.eclipse.draw2d.SWTEventDispatcher; import org.eclipse.swt.widgets.Composite; import org.eclipse.zest.core.widgets.Graph; public class NonMovableGraph extends Graph { public NonMovableGraph(Composite parent, int style) { super(parent, style); this.getLightweightSystem().setEventDispatcher( new SWTEventDispatcher() { public void dispatchMouseMoved( org.eclipse.swt.events.MouseEvent me) { // Doing nothing } }); } }
发表评论
-
GEF中用鼠标移动画布
2011-12-27 13:37 1370第一步 增加Palette项: moveTool = n ... -
Draw2d的ScrollPane的使用
2011-04-19 15:05 1611ScrollPane scrollpane = ne ... -
GEF的动态变化二
2011-04-13 10:47 1365之前有一篇文件介绍怎么实现GEF Editor中的图元的渐近、 ... -
(译)Eclipse Zest一
2011-01-07 15:14 29191. Eclipse Zest 1.1 概述 Eclips ... -
增加GEF的动态性
2011-01-06 10:25 1785在一个GEF应用中,最常的操作是移位和缩放。移位和缩放实现本身 ... -
GEF中Palette项的属性页显示
2010-11-04 14:25 2024一般来说我们只需要在GraphicalViewer部分显示在P ... -
定制GEF的Palette
2009-11-23 16:35 2546用GEF框架实现一个Editor时,会有一个默认的palett ... -
GEF增加之连接助手二
2009-10-29 16:01 1053上一篇说过怎么实现悬浮连接助手。一直想要怎么实现悬浮连接助手。 ... -
GEF功能增强之创建助手
2009-09-28 09:09 1716用过GMF就知道,GMF默认生成的editor有一个悬浮的创建 ... -
GEF功能增强之连接助手
2009-09-10 14:45 1808GEF图形编辑器中,通常 ... -
GEF中实现“拷贝为图片”
2009-09-06 09:13 1368在一个GEF的编辑器中,编辑器上是一个个的Figure,从外观 ... -
GEF中扩大、缩小时处理编辑行为
2008-12-30 10:54 1535我们为GEF应用提供了ZoomIn和ZoomOut功能之后,在 ... -
改变GEF的一些默认行为
2008-12-29 14:12 1427一、改变Layer GEF中会根据editpart的类 ... -
GEF中一个模型的多层图的问题
2008-12-26 16:00 1650一般来说,我们在做GEF的时候,通常是一个模型对应一个图,这个 ... -
GEF中增加ContextMenu的支持
2008-12-19 22:32 2642GEF中,增加对EditPart的右键菜单的支持是很普遍的一 ... -
增加Palette的拖放支持
2008-12-19 14:08 1967默认情况下,GEF中要创建一个新的结点都是通点在Palette ... -
给GEF拖放功能
2008-07-17 10:26 1898我们知道SWT支持Native的拖放。GEF使用SWT的拖放来 ... -
修改GEF中Connection的端点
2008-07-14 16:09 1846GEF中,选中一条连接线,默认的端点是两个小黑框,如下: ... -
GEF中导视图的使用
2008-07-10 17:01 2196有时增加一个导视图能给用户很大的方便性,例如在outline视 ... -
(接上篇)关于GEF Feedback的补充
2008-07-10 10:18 1405重复上篇,我们有以下类: 1、模型相关:RouteMap、H ...
相关推荐
《深入理解Maven Eclipse GEF-Zest 3.7.1与m2e-extras集成》 在软件开发过程中,工具的集成与协同工作能力至关重要。Maven作为Java项目管理和构建的强大工具,大大简化了依赖管理和构建流程。而Eclipse作为广受欢迎...
**二、Eclipse的介绍** Eclipse作为一个开放源代码的IDE,拥有丰富的插件生态系统,支持多种语言的开发。它提供了代码编辑、调试、版本控制等多种功能,极大地提高了开发效率。 **三、Maven与Eclipse的集成** 1. **...
2. `org.eclipse.zest.layouts_1.1.0.v20110425-2050.jar`:这个文件包含了Zest布局算法,用于自动布局Zest图中的节点和边,使得图形更加清晰易读。在m2eclipse的环境中,它可能帮助用户更好地理解项目的结构和依赖...
旧版本eclipse,比如indigo版本要安装maven,旧的在线安装方式已经失效,因为依赖的zest和m2eclipse的location url都已经无法访问。所以从已经安装这两个包的eclipse中分离出离线的安装包,拷贝到对应的features和...
2. 在搜索框中输入`maven`,查找Maven相关插件,最常见的是Maven Integration for Eclipse(M2E)。 3. 安装M2E:找到插件后,点击`Install`,遵循向导完成安装并重启Eclipse。 4. 配置M2E:进入`Window` -> `...
2. **m2eclipse**:这是Maven集成到Eclipse的插件,它提供了对Maven构建工具的支持,包括项目配置、依赖管理和生命周期集成。m2eclipse可以从http://m2eclipse.sonatype.org/sites/m2e获取。 3. **iBATIS Abator**...
9. **Zest 图形库**:作为 GEF 的一部分,Zest 是一个专门用于构建图形图表的库,适用于生成流程图、关系图和其他类型的可视化信息。 综上所述,"org.eclipse.gef" 插件为 Eclipse 开发者提供了一套强大的工具,...
Eclipse插件开发是软件开发领域中的一个重要环节,它允许开发者扩展Eclipse集成开发环境(IDE)的功能,以满足特定的开发需求。GEF(Graphical Editing Framework)是Eclipse平台的一部分,专为构建图形化编辑器而...
Eclipse的GEF(Graphical Editing Framework)插件是一个强大的工具,用于在Eclipse集成开发环境中创建、编辑和展示图形用户界面。它为开发者提供了一种框架,支持创建可定制的、交互式的图形编辑器,使得开发人员...
2. **org.eclipse.gef.examples.shapes** 形状示例展示了如何创建和操作各种图形形状,如矩形、椭圆、线条等。这部分包含了创建自定义图形模型、绘制和布局形状的方法,以及如何实现拖放、缩放、旋转等交互功能。这...
- **Zest图表库**:GEF的一部分,用于创建复杂的图表和图形网络,如流程图、关系图等。 5. **插件安装与集成** 将"GEF-SDK-3.4.0.zip"解压后,开发者可以通过Eclipse的"Install New Software"功能将插件导入到...
- **Zest图库**:作为GEF的一部分,Zest提供了用于创建图表的强大库,如树图、网络图等。 - **Marlin 3D绘图**:对于需要三维视图的项目,Marlin是GEF的一个扩展,提供3D图形支持。 总之,Eclipse GEF插件通过其...
2. **PDE工具**:介绍如何使用Eclipse内置的PDE工具来开发、调试和打包插件。 3. **插件生命周期**:解释插件的启动、运行和停止过程,以及如何响应Eclipse事件。 4. **扩展点和扩展**:介绍如何定义和使用Eclipse的...
同时,熟悉GEF也能为你打开通往其他图形工具如GMF(Graphical Modeling Framework)和Zest(图可视化库)的大门。 总的来说,Eclipse插件开发结合GEF框架是一项强大且富有挑战性的技术。随着你对这个领域的深入探索...
2. **Draw2D**: Draw2D是GEF的基础,它是一个二维图形绘制库,用于在Eclipse RCP应用程序中创建和管理图形元素。Draw2D提供了各种图形形状、布局算法和交互功能。 3. **ZEST**:ZEST(Zest Graph Visualization)...
GEF还提供了Zest组件,它是GEF的一个子项目,专注于开发图形可视化工具,比如图形化的图表和网络。 开发GEF插件时,开发者需要编写相应的Model、EditPart和EditPolicy类,并将它们关联起来,以构建完整的图形编辑...
5. **Zest图渲染库**:ECLIPSE GEF 5.4.0可能集成了Zest库,这是一个用于绘制图表和图形网络的库,可以创建有吸引力的视觉表示。 6. **插件体系**:Eclipse本身就是一个插件化的开发环境,GEF也是通过插件形式集成...
GEF-zest-3.6.1.zipGEF-zest-3.6.1.zipGEF-zest-3.6.1.zipGEF-zest-3.6.1.zipGEF-zest-3.6.1.zipGEF-zest-3.6.1.zip
你可以看到如何使用`Zest`库创建图表,以及如何实现基本的交互,如拖放、连接线等。 2. **高级示例**:高级示例可能包含更多的特性,如自定义手势识别、复杂编辑操作(如剪切、复制、粘贴)、以及使用`...
Zest Creator 工具,用于创建有效的 zest 脚本并通过辅助方法与脚本交互。 使用 安装它: ```bash $ npm i zest-creator ``` 需要它并使用: ```js var ZestCreator = require('zest-creator'); var opts = { ...