`
yonlist
  • 浏览: 85186 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GEF图形显示机制(一)

阅读更多

GEFeclipse中图形绘制插件,它是基于draw2d,下面来看下它的机制

先看一个draw2d程序,

要有一个LightweightSystem,然后给这个LightweightSystemsetcontents函数传递一个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();

}

ScrollingGraphicalViewercreateControl,完成lwscomposite的关联。

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关联了。

LightweightSystemsetcontents在哪呢:

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创建时就创建了;

RootfigureRootEditPartcreatefigure创建的。

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);

}

 

当然GraphicalViewerrooteditpart可以通过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/

分享到:
评论

相关推荐

    [翻译]Eclipse图形化编辑框架(GEF)/更新第7章:层和视图

    “视图”在GEF中代表了一个图形化的显示区域,它展示了模型数据的某个方面或多个方面的可视化表示。一个视图可以包含多个层,每个层负责展示不同类型的图形元素。视图通常与Eclipse工作台中的其他组件一起使用,如...

    eclipse3.4的可视化开发GEF

    Eclipse GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,用于构建图形化编辑器和可视化工具。它为开发者提供了一套全面的API,帮助创建可扩展、交互式的图形用户界面,特别适用于开发模型驱动的...

    gef版本的helloworld

    文档中指出,创建一个Editor是为了在图形界面中显示GEF图形,而这一部分通常是在Eclipse的EditorPart基础上扩展来的。作者还提到了模型、控制器和视图的放置位置,强调了Editor类应该放在gef.tutorial.step.ui包中,...

    GEF教程和demo源码

    3. **手势处理**:GEF提供了一套标准的手势处理机制,如拖放、单击、双击等,使得图形对象可以响应用户的操作。 4. **ZOrder管理**:文档将解释如何管理图形元素的层次顺序,以决定哪个元素在视觉上覆盖另一个。 5...

    GEF入门学习例子

    `GEF`(Graphical Editing Framework)是Eclipse开源组织提供的一款强大的图形编辑框架,用于构建图形用户界面(GUI)应用,特别是那些需要进行图形绘制、编辑和操作的软件。这个入门学习例子旨在帮助初学者理解GEF的...

    GEF简易教程-学习GEF的入门教程

    虽然两者都可以用来显示GEF图形,但**Editor**与**View**存在本质区别: - **Editor**提供文件保存功能,适用于需要持久化数据的场景。 - **View**主要用于展示数据,不涉及数据保存,适用于动态数据展示或监控界面...

    org.eclipse.gef

    9. **Zest 图形库**:作为 GEF 的一部分,Zest 是一个专门用于构建图形图表的库,适用于生成流程图、关系图和其他类型的可视化信息。 综上所述,"org.eclipse.gef" 插件为 Eclipse 开发者提供了一套强大的工具,...

    Eclipse插件gef 3.8.0

    Eclipse插件GEF(Graphical Editing Framework)是Eclipse IDE中的一个关键组件,它为开发图形化用户界面(GUI)和图形编辑器提供了强大的框架。GEF主要用于创建可定制的、交互式的、基于图的编辑环境,广泛应用于...

    GEF锚点鼠标定位

    它提供了一套完整的机制来处理图形元素的创建、编辑、显示以及它们之间的连接。GEF的核心组件包括模型(Model)、视图(View)、编辑器(Editor)和控制器(Controller)等,这些组件共同协作以实现图形编辑功能。 ...

    Eclipse的GEF插件

    GEF提供了一套机制来处理图形元素的绘制和布局。 3. **Edit Part**:编辑部分是视图层与用户交互的关键,它封装了用户操作和图形元素之间的映射。当用户在图形界面上进行操作时,Edit Part会处理这些事件并更新相应...

    GEF.rarGEF.rar

    GEF(Graph Editor Framework)是Eclipse项目的一部分,它提供了一个用于构建图形编辑器的开放源代码框架。Eclipse是一个广泛使用的集成开发环境(IDE),而GEF则是为了帮助开发者创建能够处理图形和图表的应用程序...

    界面设计GEF应用实例

    GEF是Eclipse平台下的一个开源组件,它为创建可定制的、交互式的图形编辑器提供了强大的支持。 【描述】中的"六个小例子"是指通过一系列逐步进阶的教程,帮助开发者从基础到高级理解并掌握GEF的使用。这些例子旨在...

    GEF原理的详细介绍+程序实例和程序源码

    2. **视图(View)**:视图是模型在屏幕上的表示,由GEF的图形组件(如Figure和Part)组成,用于显示模型数据。 3. **控制器(Controller)**:处理用户输入,如鼠标点击和键盘事件,协调模型和视图的更新。 4. **...

    GEF入门实例代码2《Eclipse插件开发》中实例

    总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的设计,还包括视图的绘制、用户交互的处理以及可撤销/重做机制的实现。通过实践,开发者可以...

    GEF快速入门教程和EMF教程

    通常情况下,GEF会集成到Editor中而非View中,这是因为Editor提供了文件保存机制,这对于图形编辑来说非常关键。 1. **创建Editor**: - 在`plugin.xml`的“extensions”页面中,添加一个新的编辑器。选择`org....

    GEF 入门教程 中文版

    - 微型视图是另一个简化版本的图形视图,用于显示模型的关键部分。 - 它可以帮助用户聚焦于当前正在编辑的部分。 **知识点2:实现微型视图** 1. **定义微型视图模型**:创建一个简化版的模型,只包含关键元素。 2....

    GEF实现拷贝粘贴

    GEF是Eclipse平台下用于构建图形化编辑器的框架,它提供了一套完整的机制来帮助开发者创建复杂的图形用户界面。 首先,我们要理解GEF的基本概念。GEF是一种模型-视图-控制器(MVC)架构的实现,它将图形界面与业务...

    将GEF应用到Web上,PPT

    本PPT可能涵盖以上内容,通过深入探讨GEF的核心机制,以及将其应用于Web的策略和技术,为开发者提供了一条从桌面应用到Web应用迁移的路径。对于有兴趣将图形编辑功能引入Web项目的人员来说,这将是一份宝贵的资源。

    GEF入门系列

    GEF,全称为Graphical Editing Framework,是Eclipse项目中的一个核心组件,主要用于构建图形化编辑器。它提供了一个强大的框架,允许开发者创建可定制、灵活且功能丰富的图形用户界面,特别适用于开发基于模型的...

    GEF连接线Node之间连接

    在IT领域,特别是图形用户界面(GUI)和可视化编程中,`GEF`(Graphical Editing Framework)是一个非常重要的开源框架。它由Eclipse项目提供,用于构建强大的图形编辑工具和应用程序。`GEF`提供了丰富的功能,允许...

Global site tag (gtag.js) - Google Analytics