GEF TreeViewer使用

GEF的ContentOutlinePage就是TreeViewer使用的例子.

下面直接贴代码, 有空再进行整理:

[b]第一段代码[/b], 在SWT的Composite的界面上添加一个GEF的TreeViewer.
		treeViewer = new org.eclipse.gef.ui.parts.TreeViewer();
treeViewer.createControl(composite);


[b]第二段代码[/b]: 设置TreeViewer
		treeViewer.setEditDomain(new EditDomain());
RootTreeEditPart rootTreeEditPart = new RootTreeEditPart();
rootTreeEditPart.setWidget((Tree) treeViewer.getControl()); // 注意这里
treeViewer.setRootEditPart(rootTreeEditPart);
treeViewer.setEditPartFactory(new TreeEditPartFactory());
treeViewer.setContents(templateModel); // 模型

getSynchronizer().addViewer(treeViewer); // getSynchronizer()是一个SelectionSynchronizer.


[b]第三段代码[/b]: TreeViewer的EditPartFactory. [很简单告诉TreeViewer怎么从Model得到TreeEditPart]
public class TreeEditPartFactory implements EditPartFactory {
/**
* @see org.eclipse.gef.EditPartFactory#createEditPart(org.eclipse.gef.EditPart, java.lang.Object)
*/
public EditPart createEditPart(EditPart context, Object model) {
EditPart part = null;
if (model instanceof TemplateModel) {
part = new TemplateTreeEditPart();
}
if (part != null) {
part.setModel(model);
}
return part;
}
}


[b]第四部分[/b]: 一个基本的TreeEditPart的定义.
直接继承于AbstractTreeEditPart. 也可以按照需要去覆盖里面的getText, getImage等方法.
如果Model是父子结构的, 一定要覆盖getModelChildren方法.
public class TemplateTreeEditPart extends AbstractTreeEditPart {
@Override
protected List getModelChildren() { // 得到当前模型下的子模型.
TemplateModel model = (TemplateModel) this.getModel();
return model.getChildren();
// return super.getModelChildren();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值