博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GEF:使用Draw2D画流程图-(上)
阅读量:6606 次
发布时间:2019-06-24

本文共 3179 字,大约阅读时间需要 10 分钟。

中已经对Draw2D进行了一些概要介绍,本篇从一个流程图的编写来学习Draw2D的是GEF的基础。

练习要求

做一个图下图所示流程图,流程图中的各个图例可以移动,每个不同类型的图例也不一样。 源码下载:

基础概念

 

 

图例Figure

这里支持三种图例,图例从ActivityFigure继承下来。主要就是画图还有定义连接点FixedAnchor,下面先看看代码,代码都比较简单

  • 开始、结束图例
    01 public class TerminatorFigure extends ActivityFigure {
    02     FixedAnchor inAnchor, outAnchor;
    03   
    04     public TerminatorFigure() {
    05         inAnchor = new FixedAnchor(this);
    06         inAnchor.place = new Point(10);
    07         targetAnchors.put("in_term", inAnchor);
    08         outAnchor = new FixedAnchor(this);
    09         outAnchor.place = new Point(12);
    10         sourceAnchors.put("out_term", outAnchor);
    11     }
    12   
    13     public void paintFigure(Graphics g) {
    14         Rectangle r = bounds;
    15         g.drawArc(r.x + r.width / 8, r.y, r.width / 4, r.height - 190180);
    16         g.drawLine(r.x + r.width / 4, r.y, r.x + 3 * r.width / 4, r.y);
    17         g.drawLine(r.x + r.width / 4, r.y + r.height - 1,
    18                 r.x + 3 * r.width / 4, r.y + r.height - 1);
    19         g.drawArc(r.x + 5 * r.width / 8, r.y, r.width / 4, r.height - 1270,
    20                 180);
    21         g.drawText(message, r.x + 3 * r.width / 8, r.y + r.height / 8);
    22     }
    23 }
  • 分支图例
    01 public class DecisionFigure extends ActivityFigure {
    02     FixedAnchor inAnchor, yesAnchor, noAnchor;
    03   
    04     public DecisionFigure() {
    05         inAnchor = new FixedAnchor(this);
    06         inAnchor.place = new Point(10);
    07         targetAnchors.put("in_dec", inAnchor);
    08         noAnchor = new FixedAnchor(this);
    09         noAnchor.place = new Point(21);
    10         sourceAnchors.put("no", noAnchor);
    11         yesAnchor = new FixedAnchor(this);
    12         yesAnchor.place = new Point(12);
    13         sourceAnchors.put("yes", yesAnchor);
    14     }
    15   
    16     public void paintFigure(Graphics g) {
    17         Rectangle r = bounds;
    18         PointList pl = new PointList(4);
    19         pl.addPoint(r.x + r.width / 2, r.y);
    20         pl.addPoint(r.x, r.y + r.height / 2);
    21         pl.addPoint(r.x + r.width / 2, r.y + r.height - 1);
    22         pl.addPoint(r.x + r.width, r.y + r.height / 2);
    23         g.drawPolygon(pl);
    24         g.drawText(message, r.x + r.width / 4 5, r.y + 3 * r.height / 8);
    25         g.drawText("N", r.x + 7 * r.width / 8, r.y + 3 * r.height / 8);
    26         g.drawText("Y", r.x + r.width / 2 2, r.y + 3 * r.height / 4);
    27     }
    28 }
  • 流程图例
    01 public class ProcessFigure extends ActivityFigure {
    02     FixedAnchor inAnchor, outAnchor;
    03   
    04     public ProcessFigure() {
    05         inAnchor = new FixedAnchor(this);
    06         inAnchor.place = new Point(10);
    07         targetAnchors.put("in_proc", inAnchor);
    08         outAnchor = new FixedAnchor(this);
    09         outAnchor.place = new Point(12);
    10         sourceAnchors.put("out_proc", outAnchor);
    11     }
    12   
    13     public void paintFigure(Graphics g) {
    14         Rectangle r = bounds;
    15         g.drawText(message, r.x + r.width / 4, r.y + r.height / 4);
    16         g.drawRectangle(r.x, r.y, r.width - 1, r.height - 1);
    17     }
    18 }
  • FixedAnchor:连接画线时会根据place来调用getLocation确定连接终点的位置
    01 public class FixedAnchor extends AbstractConnectionAnchor
    02 {
    03   Point place;
    04   public FixedAnchor(IFigure owner)
    05   {
    06     super(owner);
    07   }
    08     
    09   public Point getLocation(Point loc)
    10   {
    11     Rectangle r = getOwner().getBounds();
    12     int x = r.x + place.x * r.width/2;
    13     int y = r.y + place.y * r.height/2;
    14     Point p = new PrecisionPoint(x,y);
    15     getOwner().translateToAbsolute(p);
    16     return p;
    17   }
    18 }
  • ActivityFigure:主要处理连接点的代码
     
 本文转自 陈本峰 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/516874
,如需转载请自行联系原作者
你可能感兴趣的文章
深度学习笔记之CNN(卷积神经网络)基础
查看>>
JAVA设计模式之【原型模式】
查看>>
Hadoop 添加删除数据节点(datanode)
查看>>
33.8. slb configuration
查看>>
ext的window如何隐藏水平滚动条
查看>>
71.8. Run level shell script to start Oracle 10g services on RedHat Enterprise Linux (RHAS 4)
查看>>
SAP QM Transfer of Inspection Stock
查看>>
全新视觉| 数治省市:SAP大数据构想一切可能
查看>>
ORACLE expdp备份与ORA-31693、ORA-02354、ORA-02149
查看>>
SAP S/4 HANA新变化-信用管理
查看>>
清华梦的粉碎读后感--论理想主义者王垠
查看>>
doc-remote-debugging.html
查看>>
功能奇数次执行和偶数次执行时的结果不同的故障复盘
查看>>
DBMS_STATS.GATHER_TABLE_STATS
查看>>
Java-单机版的书店管理系统(练习设计模块和思想_系列 五 )
查看>>
Reddit 讨论:Hinton的Capsule网络真的比CNN效果更好吗?
查看>>
微信支付现金红包接口
查看>>
嵌入式 详解udev
查看>>
《C程序员:从校园到职场》出版预告(2):从“百花齐放”到“一枝独秀”
查看>>
Network Monitor 查询命令和MySQL命令
查看>>