快速业务通道

[Eclipse]GEF入门系列(五、浅谈布局) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
高度,因为Label类覆盖了 Figure的getPreferedSize()方法,使得它的高度只与里面的文本有关。解决方法是构造一个 HeaderFigure,让它维护一个Label,设置列头高度时实际设置的是HeaderFigure的高度;或 者直接让HeaderFiguer继承Label并重新覆盖getPreferedSize()也可以。我在项目里使用的 是前者。

第二个问题花了我一些时间才搞定,一开始我是在CellPart的refreshVisuals()方法里手 动设置CellFigure的高度为ColumnFigure下部区域高度的三分之一,但这样很勉强,而且还 需要额外考虑spacing带来的影响。后来通过自定义Layout的方式比较圆满的解决了这个问题 ,我让ColumnFigure使用自定义的ColumnLayout,这个Layout继承自ToolbarLayout,但覆盖 了layout()方法,内容如下:

class ColumnLayout extends ToolbarLayout {   public void layout(IFigure parent) {     IFigure nameFigure=(IFigure)parent.getChildren().get(0);     IFigure childrenFigure=(IFigure)parent.getChildren().get(1);     Rectangle clientArea=parent.getClientArea();     nameFigure.setBounds(new Rectangle (clientArea.x,clientArea.y,clientArea.width,30));     childrenFigure.setBounds(new Rectangle(clientArea.x,nameFigure.getBounds ().height+clientArea.y,clientArea.width,clientArea.height-nameFigure.getBounds ().height));   } }

也就是说,在layout里控制列头和下部的高度分别为30和剩下的高度。但这还没有完,为 了让单元格正确的定位在表格列中,我们还要指定列下部图形(childrenFigure)的布局管 理器,因为实际上单元格都是放在这个图形里的。前面说过,Draw2D并没有提供一个像SWT中 FillLayout那样的布局管理器,所以我们要再自定义另一个layout,我暂时给它起名为 FillLayout(与SWT的FillLayout同名),还是要覆盖layout方法,如下所示(因为用了 transposer所以horizontal和vertical两种情况可以统一处理,这个transposer只在 horizontal时才起作用):

public void layout(IFigure parent) {   List children = parent.getChildren();   int numChildren = children.size();   Rectangle clientArea = transposer.t(parent.getClientArea());   int x = clientArea.x;   int y = clientArea.y;   for (int i = 0; i < numChildren; i++) {     IFigure child = (IFigure) children.get(i);     Rectangle newBounds = new Rectangle(x, y, clientArea.width, -1);     int divided = (clientArea.height - ((numChildren - 1) * spacing)) / numChildren;     if (i == numChildren - 1)       divided = clientArea.height - ((divided + spacing) * (numChildren - 1));     newBounds.height = divided;     child.setBounds(transposer.t(newBounds));     y += newBounds.height + spacing;   } }

[Eclipse]GEF入门系列(五、浅谈布局)(3)

时间:2011-04-19 cnblogs bjzhanghao

上面这些语句的作用是将父图形的高(宽)度平均分配给每个子图形,如果是处于最后的 一位的子图形,让它占据所有剩下的空间(防止除不尽的情况留下空白)。完成了这个 FillLayout,只要让childrenFigure使用它作为布局管理器即可,下面是ColumnFigure的大 部分代码,列头图形(HeaderFigure)和列下部图形(ChildrenFigure)作为内部类存在:

private HeaderFigure name = new HeaderFigure(); private ChildrenFigure childrenFigure = new ChildrenFigure(); public ColumnFigure() {   ToolbarLayout layout = new ColumnL

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号