eclipsegef:[Eclipse]GEF入门系列(十、表格的一个实现)来源: 发布时间:星期四, 2009年1月8日 浏览:83次 评论:0
在目前GEF版本(3.1M6)里可用LayoutManager还不是很多在新闻组里经常会看到要求增加更多布局帖子有人也提供了自己实现例如这个GridLayout相当于SWT中GridLayoutDraw2D实现等等虽然可以肯定GEF未来版本里会增加更多布局供开发者使用(可能需要很长时间)然而目前要用GEF实现表格操作还没有很直接办法这里说说我做法仅供参考
实现表格思路方法决定于模型设计初看来我们似乎应该有这些类:表格(Table)、行(Row)、列(Column)和单元格(Cell)每个模型对象对应个EditPart以及个FigureTablePart应该包含RowPart和ColumnPart问题是RowFigure和ColumnFigure会产生交叉想象下你表格该使用什么样布局才能容纳它们?使用这样模型并非不能实现(例如使用StackLayout)但我认为这样模型需要做额外工作会很多所以我使用基于列模型 在我表格模型里只有 3种对象:Table、Column和Cell但Column有个子类HeaderColumn表示第列同时Cell有个子类HeaderCell表示位于第列里单元格后面这两个类作用主要是模拟实现对行操作--把对行操作都转换为对HeaderCell操作例如创建个新行转换为在第列中增加个新单元格当然在这同时我们要让给其余每列同样增加个单元格 图5 改变行高时回显 经过上面修改对HeaderCell操作在界面上已经完全表现为对表格行操作了这些操作结果会转换为些Command包括CreateHeaderCellCommand(创建新行你也可以命名为CreateRowCommand)、MoveHeaderCellCommand(移动行)、DeleteHeaderCellCommand(删除行)和ChangeHeaderCellHeightCommand(改变行高)等在这些类里要对所有列执行同样操作(例如改变HeaderCell高度同时改变同行中其他单元格高度)这样在界面上才能保持表格外观详细代码没有必要贴在这里了 P.S.曾经考虑过另种实现表格思路方法就是模型里只有Table和Cell两种对象然后自己写个TableLayout负责单元格布局同样是修改工作量相对比较大而没有采用那样话行和列都要使用自定义方式处理而这篇贴子介绍思路方法只关心行处理就可以了当然这里说也不是什么标准实现不过效果还是不错而且确实可以实现如果你有类似需求可以作为参考 0
相关文章
读者评论发表评论 |