`
henrydlwang2015
  • 浏览: 896 次
文章分类
社区版块
存档分类
最新评论

Draw2D使用心得

阅读更多
   最近在开发Eclipse插件的过程中,需要展现COBOL作业的TWS调用流程,打算通过在Eclipse的视图中展现。大致的处理流程是:开发人员通过菜单选择查询TWS流程图选项,弹出对话框,输入需要查询的作业ID和环境参数,系统去主机DB2查询作业的关系数据库,将关系组装成Map表返回给Exclipse,Exclipse再通过解析Map并在视图中展现作业调用关系。
   整个流程关键是展现,需要图形化。经过考虑查找,决定使用DRAW2D。这个过程非常闹心,毕竟是新的框架,下面是使用心得。
   1、FigureCanvas可以作为底层画板,不用再实例化LightWeightSystem,因为FigureCanvas实例化之后会自行创建一个LightWeightSystem.
   2、为了将图形展现在不同层次,需要创建Layer层,并通过LayeredPane来管理每个Layer的层次
   3、ScrollPane支持滚动条,如果图形展现区域比较大,可以将图形加载在ScrollPane上面,但是图形在展现前能通过调用layoutManger获取子图的大小,以便计算scroll的position和extent的大小。
   4、PolyConnection不受FlowLayout的限制,即如果layer层加了PolyConnection,且layer的layoutManger是FlowLayout,PolyConnection还是以SourcePosition 和TargetPosition决定。而不是顺序排列。
   5、AbstractLayoutManager中的Layout()方法是设置各个子图的在本图层的位置(setBounds)的,不能在这个方法中更新本图层的位置,否则出现死循环,原因是:LightWeightSystem会维护一个UpdateManger,用来更新每个invalidate的figure;如果本图层(figure)在updateManager的invalid的列表里了,那么updateManager就会调用本图层(figure)对应LayoutManager的Layout()方法,并把本图层从invalid list中剔除,但是如果layout()方法又调用了figure.setBounds()等会导致figure的状态invalidate时,则updateManger又会将本图层加入到他的invalid List里面,这样就死循环了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics