GEF是eclipse中图形绘制插件,它是基于draw2d,下面来看下它的机制
先看一个draw2d程序,
要有一个LightweightSystem,然后给这个LightweightSystem的setcontents函数传递一个figure,这个figure就是LightweightSystem的根figure了。
public static void main(String args[])
{
final Label label = new Label("Press a button!");
Shell shell = new Shell();
LightweightSystem lws = new LightweightSystem(shell);
Figure parent = new Figure();
parent.setLayoutManager(new XYLayout());
lws.setContents(parent);
Clickable above = new CheckBox("I'm above!");
parent.add(above, new Rectangle(10,10,80,20));
ButtonModel aModel = new ToggleModel();
aModel.addChangeListener(new ChangeListener()
{
public void handleStateChanged(ChangeEvent e)
{
label.setText("Above");
}
});
above.setModel(aModel);
Clickable below = new CheckBox("I'm below!");
parent.add(below, new Rectangle(10,40,80,20));
ButtonModel bModel = new ToggleModel();
bModel.addChangeListener(new ChangeListener()
{
public void handleStateChanged(ChangeEvent e)
{
label.setText("Below");
}
});
below.setModel(bModel);
ButtonGroup bGroup = new ButtonGroup();
bGroup.add(aModel);
bGroup.add(bModel);
bGroup.setDefault(bModel);
parent.add(label, new Rectangle(10,70,80,20));
shell.setSize(130,120);
shell.open();
shell.setText("Example");
Display display = Display.getDefault();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep ();
}
那在GEF中如何实现上面这一个过程的呢。
public abstract class GraphicalEditor
extends EditorPart
implements CommandStackListener, ISelectionListener
{
public void createPartControl(Composite parent) {
createGraphicalViewer(parent);
}
protected void createGraphicalViewer(Composite parent) {
GraphicalViewer viewer = new ScrollingGraphicalViewer();
viewer.createControl(parent);
setGraphicalViewer(viewer);
configureGraphicalViewer();
hookGraphicalViewer();
initializeGraphicalViewer();
}
ScrollingGraphicalViewer的createControl,完成lws和composite的关联。
public final Control createControl(Composite parent) {
FigureCanvas canvas = new FigureCanvas(parent, getLightweightSystem());
setControl(canvas);
installRootFigure();
return canvas;
}
protected LightweightSystem getLightweightSystem() {
return lws;
}
private final LightweightSystem lws = createLightweightSystem();
这样就创建一个LightweightSystem了,并和composite关联了。
那LightweightSystem得setcontents在哪呢:
在installRootFigure这个函数:
private void installRootFigure() {
if (getFigureCanvas() == null)
return;
if (rootFigure instanceof Viewport)
getFigureCanvas().setViewport((Viewport)rootFigure);
else
getFigureCanvas().setContents(rootFigure);
}
public void setViewport(Viewport vp) {
if (viewport != null)
unhookViewport();
viewport = vp;
lws.setContents(viewport);
hookViewport();
}
也就是说viewport就是rootifigure.
那这个rootfigure是哪来的呢:
这个是在GraphicalViewer创建时就创建了;
Rootfigure是RootEditPart的createfigure创建的。
GraphicalViewer继承GraphicalViewerImpl
public GraphicalViewerImpl () {
createDefaultRoot();
setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.NONE),
MouseWheelDelegateHandler.SINGLETON);
}
protected void createDefaultRoot() {
setRootEditPart(new ScalableRootEditPart());
}
public void setRootEditPart(RootEditPart editpart) {
super.setRootEditPart(editpart);
setRootFigure(((GraphicalEditPart)editpart).getFigure());
}
protected void setRootFigure(IFigure figure) {
rootFigure = figure;
getLightweightSystem().setContents(rootFigure);
}
当然GraphicalViewer的rooteditpart可以通过setrooteditpart函数改。
public void setRootEditPart(RootEditPart editpart) {
super.setRootEditPart(editpart);
setRootFigure(((GraphicalEditPart)editpart).getFigure());
}
public void setRootEditPart(RootEditPart editpart) {
if (rootEditPart != null) {
if (rootEditPart.isActive())
rootEditPart.deactivate();
rootEditPart.setViewer(null);
}
rootEditPart = editpart;
rootEditPart.setViewer(this);
if (getControl() != null)
rootEditPart.activate();
}
protected void setRootFigure(IFigure figure) {
rootFigure = figure;
getLightweightSystem().setContents(rootFigure);
}
当然设置后会覆盖原来的。
转载自http://sjj0412.cublog.cn/
分享到:
相关推荐
“视图”在GEF中代表了一个图形化的显示区域,它展示了模型数据的某个方面或多个方面的可视化表示。一个视图可以包含多个层,每个层负责展示不同类型的图形元素。视图通常与Eclipse工作台中的其他组件一起使用,如...
Eclipse GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,用于构建图形化编辑器和可视化工具。它为开发者提供了一套全面的API,帮助创建可扩展、交互式的图形用户界面,特别适用于开发模型驱动的...
文档中指出,创建一个Editor是为了在图形界面中显示GEF图形,而这一部分通常是在Eclipse的EditorPart基础上扩展来的。作者还提到了模型、控制器和视图的放置位置,强调了Editor类应该放在gef.tutorial.step.ui包中,...
3. **手势处理**:GEF提供了一套标准的手势处理机制,如拖放、单击、双击等,使得图形对象可以响应用户的操作。 4. **ZOrder管理**:文档将解释如何管理图形元素的层次顺序,以决定哪个元素在视觉上覆盖另一个。 5...
`GEF`(Graphical Editing Framework)是Eclipse开源组织提供的一款强大的图形编辑框架,用于构建图形用户界面(GUI)应用,特别是那些需要进行图形绘制、编辑和操作的软件。这个入门学习例子旨在帮助初学者理解GEF的...
虽然两者都可以用来显示GEF图形,但**Editor**与**View**存在本质区别: - **Editor**提供文件保存功能,适用于需要持久化数据的场景。 - **View**主要用于展示数据,不涉及数据保存,适用于动态数据展示或监控界面...
9. **Zest 图形库**:作为 GEF 的一部分,Zest 是一个专门用于构建图形图表的库,适用于生成流程图、关系图和其他类型的可视化信息。 综上所述,"org.eclipse.gef" 插件为 Eclipse 开发者提供了一套强大的工具,...
Eclipse插件GEF(Graphical Editing Framework)是Eclipse IDE中的一个关键组件,它为开发图形化用户界面(GUI)和图形编辑器提供了强大的框架。GEF主要用于创建可定制的、交互式的、基于图的编辑环境,广泛应用于...
它提供了一套完整的机制来处理图形元素的创建、编辑、显示以及它们之间的连接。GEF的核心组件包括模型(Model)、视图(View)、编辑器(Editor)和控制器(Controller)等,这些组件共同协作以实现图形编辑功能。 ...
GEF提供了一套机制来处理图形元素的绘制和布局。 3. **Edit Part**:编辑部分是视图层与用户交互的关键,它封装了用户操作和图形元素之间的映射。当用户在图形界面上进行操作时,Edit Part会处理这些事件并更新相应...
GEF(Graph Editor Framework)是Eclipse项目的一部分,它提供了一个用于构建图形编辑器的开放源代码框架。Eclipse是一个广泛使用的集成开发环境(IDE),而GEF则是为了帮助开发者创建能够处理图形和图表的应用程序...
GEF是Eclipse平台下的一个开源组件,它为创建可定制的、交互式的图形编辑器提供了强大的支持。 【描述】中的"六个小例子"是指通过一系列逐步进阶的教程,帮助开发者从基础到高级理解并掌握GEF的使用。这些例子旨在...
2. **视图(View)**:视图是模型在屏幕上的表示,由GEF的图形组件(如Figure和Part)组成,用于显示模型数据。 3. **控制器(Controller)**:处理用户输入,如鼠标点击和键盘事件,协调模型和视图的更新。 4. **...
总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的设计,还包括视图的绘制、用户交互的处理以及可撤销/重做机制的实现。通过实践,开发者可以...
通常情况下,GEF会集成到Editor中而非View中,这是因为Editor提供了文件保存机制,这对于图形编辑来说非常关键。 1. **创建Editor**: - 在`plugin.xml`的“extensions”页面中,添加一个新的编辑器。选择`org....
- 微型视图是另一个简化版本的图形视图,用于显示模型的关键部分。 - 它可以帮助用户聚焦于当前正在编辑的部分。 **知识点2:实现微型视图** 1. **定义微型视图模型**:创建一个简化版的模型,只包含关键元素。 2....
GEF是Eclipse平台下用于构建图形化编辑器的框架,它提供了一套完整的机制来帮助开发者创建复杂的图形用户界面。 首先,我们要理解GEF的基本概念。GEF是一种模型-视图-控制器(MVC)架构的实现,它将图形界面与业务...
本PPT可能涵盖以上内容,通过深入探讨GEF的核心机制,以及将其应用于Web的策略和技术,为开发者提供了一条从桌面应用到Web应用迁移的路径。对于有兴趣将图形编辑功能引入Web项目的人员来说,这将是一份宝贵的资源。
GEF,全称为Graphical Editing Framework,是Eclipse项目中的一个核心组件,主要用于构建图形化编辑器。它提供了一个强大的框架,允许开发者创建可定制、灵活且功能丰富的图形用户界面,特别适用于开发基于模型的...
在IT领域,特别是图形用户界面(GUI)和可视化编程中,`GEF`(Graphical Editing Framework)是一个非常重要的开源框架。它由Eclipse项目提供,用于构建强大的图形编辑工具和应用程序。`GEF`提供了丰富的功能,允许...