快速业务通道

[Eclipse]GEF入门系列(十、表格的一个实现) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
个量即可增加这条线的长度 ,这个量和表格当前列的数目有关,和列间距也有关,计算的方法看上面的代码很清楚。这 样修改后的效果如下图所示,拖动行到新的位置时也会使用同样的插入线。

[Eclipse]GEF入门系列(十、表格的一个实现) - 编程入门网

图2 与表格同宽的插入线

选中整个行

缺省情况下,鼠标点击一个单元格会在 这个单元格四周产生一个黑色的边框,用来表示被选中的状态。为了让用户能选中整个行, 要修改HeaderCell上的EditPolicy。在前面一篇帖子里已经专门讲过,单元格作为列的子元 素,要修改它的EditPolicy就要在ColumnPart的EditPolicy的createChildEditPolicy()方法 里返回自定义的EditPolicy,这里我返回的是自己实现的DragRowEditPolicy,它继承自GEF 内置的ResizableEditPolicy类,它将被HeaderColumnPart加到子元素HeaderCellPart的 EditPolicy列表。现在就来修改DragRowEditPolicy以实现整个行的选中。

首先要说 明,在GEF里一个图形被选中时出现的黑边和控制点称为Handle,其中黑边称为MoveHandle, 用于移动图形;而那些控制点称为ResizeHandle,用于改变图形的尺寸。要改变黑边的尺寸 (由单元格的宽度扩展为整个表格的宽度),我们得继承MoveHandle并覆盖它的getLocator ()方法,下面的代码是我的实现:

public class RowMoveHandle extends MoveHandle {   public RowMoveHandle(GraphicalEditPart owner, Locator loc) {     super(owner, loc);   }   public RowMoveHandle (GraphicalEditPart owner) {     super(owner);   }   //计算 得到选中行所占的位置,传给MoveHandleLocator作为参考   public Locator getLocator() {     IFigure refFigure = new Figure();      Rectangle rect=((HeaderCellPart) getOwner()).getRowBound();      translateToAbsolute(rect);     refFigure.setBounds(rect);      return new MoveHandleLocator(refFigure);   } }

在getLocator()方法里,我们调用了HeaderCellPart的getRowBound()方法用于得到选中 行的位置和尺寸,这个方法的代码如下(放在HeaderCellPart里是因为在Handle里通过 getOwner()可以很容易得到EditPart对象),行尺寸的计算方法与前面插入线的情况类似:

public Rectangle getRowBound(){    Rectangle rect = getFigure().getBounds().getCopy();    Diagram diagram = (Diagram) getParent().getParent().getModel();    Column column = (Column) getParent().getModel();    rect.setSize(diagram.getColumns().size() * column.getWidth() + (diagram.getColumns().size() - 1) * IConstants.COLUMN_SPACING, rect.getSize ().height);    return rect; }

[Eclipse]GEF入门系列(十、表格的一个实现)(3)

时间:2011-04-19 cnblogs bjzhanghao

有了这个RowMoveHandle,只要把它代替原来缺省的MoveHandle加到HeaderColumnCell上 即可,具体的方法就是覆盖DragRowEditPolicy的createSelectionHandles()方法, ResizableEditPolicy对这个方法的缺省实现是加一个黑框和八个控制点,而我们要改成下面 这样:

protected List createSelectionHandles() {    List l = new ArrayList();    //四周的黑色边框    l.add(new RowMoveHandle((GraphicalEditPart) getHost()));    //下方的控制点    l.add(new RowResizeHandle((GraphicalEditPart) getHost(), PositionConstants.SOUTH));    return l; }

代码里用到的RowResizeHandle类是控制点的自定义实现,在下面很快会讲到。现在,用 户可以看到整个行被选中的效果了。

[Eclipse]GEF入门系列(十、表格的一个实现) - 编程入门网

图3 选中整个行

改变行的高度

改变行高度比较自然的方式是让用户选中行后自由拖动下面的边。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号