`
lggege
  • 浏览: 372825 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GEF实践总结(四)SelectionTool与SelectionEditPolicy

    博客分类:
  • GEF
阅读更多

一. 目标

  1. 能够选中Column。
  2. 对Column选择时,能够在首要选中、次要选中、取消选中显示不一样的颜色。


二. 修改GraphicalViewer,设置EditDomain,并指定ActiveTool
会发现目前的效果中,无法点选、圈选图像(Table或Column),没错,因为缺少了SelectionTool或MarqueeTool。

//
EditDomain domain = new EditDomain();
domain.setActiveTool(new SelectionTool());
graphicalViewer.setEditDomain(domain);

 

EditDomain 类似于GraphicalViewer的执行的上下环境,通过setActiveTool可以设置当前处于Active状态的Tool。
Tool :对鼠标事件、按键等的处理,或代理
SelectionTool :点选
MarqueeTool :圈选


三. 改写Figure

public TableColumnFigure() {
super();

this.setOpaque(true);
}

 

setOpaque :设置背景色不透明

public void setSelection(boolean primary, boolean selected) {
if (primary && selected) {
this.setBackgroundColor(ColorConstants.yellow);
} else if (selected) {
this.setBackgroundColor(ColorConstants.lightGray);
} else {
this.setBackgroundColor(ColorConstants.white);
}
}
  1. 首要选中时背景色为黄色
  2. 次要选中时背景色为灰色
  3. 未选中(取消选中)时背景色为白色

四. 给TableColumnEditPart添加SelectionEditPolicy

public class TableColumnSelectionEditPolicy extends SelectionEditPolicy {
@Override
protected void showPrimarySelection() {
TableColumnFigure figure = (TableColumnFigure) getHostFigure();
figure.setSelection(true, true);
}

@Override
protected void showSelection() {
TableColumnFigure figure = (TableColumnFigure) getHostFigure();
figure.setSelection(false, true);
}

@Override
protected void hideSelection() {
TableColumnFigure figure = (TableColumnFigure) getHostFigure();
figure.setSelection(false, false);
}
} 
 

a) EditPolicy
b) SelectionEditPolicy

  1. showPrimarySelection : 显示首要选中的模型。默认情况下直接使用showSelection方法。
  2. showSelection :显示选中的模型,非首要选中的模型。
  3. hideSelection :取消选中

五. 注册SelectionEditPolicy

@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new TableColumnSelectionEditPolicy());
}
 

六. 启动,查看运行效果


七. 总结

  1. 通过给GraphicalViewer添加EditDomain,并指定Active的Tool为SelectionTool就可以点选图像了。
  2. 通过添加SelectionEditPolicy,就可以处理首要选中,非首要选中,未选中(取消选中)的不同效果了。

 

3
0
分享到:
评论
1 楼 xmind 2010-05-19  
请问楼主 怎么不让多选啊?
谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics