专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » 点击这里:GEF 进阶 第 3部分: Layer »正文

点击这里:GEF 进阶 第 3部分: Layer

来源: 发布时间:星期六, 2009年12月19日 浏览:0次 评论:0
  Layer (层)

  GEF 图形是可能分布在多个层上面比如连线是放在Connection Layer(连接层)上而普通图形(比如Shapes Example里面长方形和椭圆)是放置在Primary Layer(主层)上区别类型图形放置在区别层上既易于管理又结构清晰因此层是个非要重要功能层其实也是个图形和其他图形样都继承自Figure类所以我们也可以象添加普通图形样添加层只不过方式有点区别而已

  我们首先需要知道层是在哪里创建才好动手修改它们在GEF中个EditPart Viewer都有个特殊EditPart叫做Root而层创建就在其中因此要添加自定义首先任务就是扩展Root EditPart般来说我们使用是ScalableFreeformRootEditPart

  提示: 使用何种Root EditPart也是可以自己控制只需要在重载GraphicalEditorconfigureGraphicalViewer思路方法指定使用我们自己Root EditPart即可以下是段举例代码斜黑体部分就是具体:

protected void configureGraphicalViewer { 
 super.configureGraphicalViewer; 
 
 GraphicalViewer viewer = getGraphicalViewer; 
 viewer.RootEditPart( ScalableFreeformRootEditPart); 
 
 // more code 
 …………… 
} 


  所以这是我们能够自定义层个前提

  ScalableFreeformRootEditPartcreateLayers思路方法是创建层关键所在仔细观察其实现不难看出GEF缺省定义了如图1所示层次结构:


图1. ScalableFreeformRootEditPart缺省层结构


  查看原图(大图)

  提示: 先添加层在下后添加层在上

  我们看到缺省包含了很多层而且层中还有子层每个层都有个关键字来标识我们从下到上做个简要描述:

  Grid Layer: 网格层用来显示个网格帮助你定位图形

  Primary Layer: 主层大部分图形都放置在这个层

  Connection Layer: 连接层连线都放置在这

  Prable Layer: 可打印层这个层并没有实际作用只是用来包含主层和连接层

  Scaled Feedback Layer: 扩展反馈层所谓反馈是指操作时显示些提示信息比如你拖动个图形时会显示个虚影这就是反馈

  Scalable Layer: 和Prable Layer只是个容器层

  Handle Layer: Handle是指些可以拖动小方块比如选择个图形时会显示 8个用于ResizeHandle

  Feedback Layer: 也是个反馈层

  Guide Layer: 帮助层

  所有层我们都可以通过getLayer思路方法得到因此我们有很大自由去控制这些层属性但是如果我们要添加个层或者修改个层行为我们必须实现自己RootEditPart

  Background Layer (背景层)

  出于演示我们添加个比较简单叫做Background Layer用处就是在画布上显示个渐进背景我们把这个层添加到Primary Layer的前避免覆盖主层上图形

  注意我们添加这个层只是出于演示目实际上添加个背景色并不用费此周章我们只是为了介绍说明如何添加个自定义

  创建BackgroundLayer类

  我们首先来创建类对于层我们只要继承Layer类就可以了而Layer本身继承自Figure它没有添加任何新思路方法如果你扩展过Figure类对此就应该比较熟悉了由于我们只是画个渐进背景色所以只需要重载下paFigure思路方法就可以了如下


package org.eclipse.gef.examples.shapes.layer; 
 
import org.eclipse.draw2d.ColorConstants; 
import org.eclipse.draw2d.FreeformLayer; 
import org.eclipse.draw2d.Graphics; 
 
public  BackgroundLayer extends FreeformLayer { 
 public  final String BACKGROUND_LAYER = "Background Layer"; 
 
 public BackgroundLayer { 
 Opaque(true); 
 } 
 
 @Override 
 protected void paFigure(Graphics graphics) { 
 (isOpaque) { 
  graphics.ForegroundColor(ColorConstants.white); 
  graphics.BackgroundColor(ColorConstants.lightBlue); 
  graphics.fillGradient(getBounds, true); 
 } 
 } 
} 


  我们最终扩展是FreeformLayer而不是Layer, 如果直接扩展Layer我们层会无法自动改变大小我们推荐从FreeformLayer开始你工作

  实现MyRootEditPart

  由于我们只需要插入个层所以我们重载ScalableFreeformRootEditPart中createPrableLayers思路方法就可以了再次提醒是要注意插入位置先加入层在下后加入在上


package org.eclipse.gef.examples.shapes.parts; 
 
import org.eclipse.draw2d.ConnectionLayer; 
import org.eclipse.draw2d.FreeformLayer; 
import org.eclipse.draw2d.FreeformLayeredPane; 
import org.eclipse.draw2d.LayeredPane; 
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart; 
import org.eclipse.gef.examples.shapes.layer.BackgroundLayer; 
 
public  MyRootEditPart extends ScalableFreeformRootEditPart { 
 @Override 
 protected LayeredPane createPrableLayers { 
 FreeformLayeredPane layeredPane =  FreeformLayeredPane; 
 layeredPane.add( BackgroundLayer, BackgroundLayer.BACKGROUND_LAYER); 
 layeredPane.add( FreeformLayer, PRIMARY_LAYER); 
 layeredPane.add( ConnectionLayer, CONNECTION_LAYER); 
  layeredPane; 
 } 
} 




  让我们自定义RootEditPart 生效是相当简单只要修改ShapesEditor. configureGraphicalViewer将ScalableFreeformRootEditPart替换为 MyRootEditPart即可就不列出代码了完成的后我们就可以看到画板有了个渐进式背景如图2所示:


图2. 背景层


  结束语

  GEF中几乎切东西都可以定制本文介绍是层定制层对于个复杂图形应用(比如布线)来说是非常重要GEFRootEditPart是层创建地方同时getLayer思路方法可以让我们方便访问层对象而添加个自定义层也是相当简单



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: