GEF实践总结(四)SelectionTool与SelectionEditPolicy

一. 目标

  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,就可以处理首要选中,非首要选中,未选中(取消选中)的不同效果了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值