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

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

首页 »Java教程 » eclipsegef:[Eclipse]GEF入门系列( 5、浅谈布局) »正文

eclipsegef:[Eclipse]GEF入门系列( 5、浅谈布局)

来源: 发布时间:星期四, 2009年1月8日 浏览:59次 评论:0
  虽然很多GEF应用里都会用到连接(Connection)但也有些应用是不需要用连接来表达关系我们目前正在做这个项目就是这样个例子在这类应用中模型对象间关系主要通过图形包含来表达所以大多是对多关系

    this.label.Text(text);
    this.repa;
  }
  public void Bounds(Rectangle rect) {
    super.Bounds(rect);
    this.label.Bounds(rect);
  }
}

  单元格布局管理器同样使用FillLayout在需求中用户向单元格里添加第个节点时该节点要充满单元格;当单元格里有两个节点时每个节点占 2分的高度;依次类推下面表格整理总结了各个图形使用布局管理由表可见只有包含子图形那些图形才需要布局管理器原因很明显:布局管理器关心和管理是"子"图形请时刻牢记这

  布局管理器 直接子图形
画布 ToolbarLayout 列
列 ColumnLayout 列头部、列下部
-列头部 无 无
-列下部 FillLayout 单元格
单元格 FillLayout 节点
节点 无 无

  这里需要特别提醒点:在个图形使用ToolbarLayout或子类作为布局管理器时图形对应EditPart上如果安装了FlowLayoutEditPolicy或子类你可能会得到个ClassCastException异常例如例子中CellFigure它对应EditPart是CellPart其上安装了CellLayoutEditPolicy是FlowLayoutEditPolicy个子类出现这个异常原因是在FlowLayoutEditPolicyisHorizontal思路方法中会将图形layout强制转换为FlowLayout而我们使用是ToolbarLayout我认为这是GEF个疏忽作者曾说过FlowLayout可应用于ToolbarLayout幸好解决思路方法也不复杂:在你那个EditPolicy中覆盖isHorizontal思路方法在这个思路方法里先判断layout是ToolbarLayout还是FlowLayout再根据结果返回合适boolean值即可

  最后有关我们画布还有个问题没有解决我们希望表格列增多到定程度后画布可以向右边扩展尺寸前面说过画布使用是FreeformLayer作为图形为了达到目还必须在editor里设置rootEditPart为ScalableRootEditPart要注意不是ScalableFreeformRootEditPart后者在需要各个方向都能扩展画布应用中经常被使用有关各种RootEditPart使用方法在后续帖子里将会介绍到

  以上结合具体例子讲解了如何在GEF中使用ToolbarLayout以及自定义简单布局管理器我们构造图形应该遵守个原则那就是尽量让布局管理器决定每个子图形位置和尺寸这样可以避免很多麻烦当然也有例外比如在XYLayout这种只关心子图形位置布局管理器中就必须为每个子图形指定尺寸否则图形将尺寸过小而不可见这也是个开发人员十分容易疏忽地方

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: