快速业务通道

Eclipse GEF常用技巧 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

Eclipse GEF常用技巧

时间:2011-09-09

1、大纲视图右键菜单项受editpart的createEditPolicies()方法影响。例如 :虽然右键菜单提供了删除选项,但只要相关的treeeditpart没有install ComponentEditPolicy,那么当鼠标打开该节点的右键菜单时,是不会看到“删除”项的。

2、和1类似,有时候某些作为容器元素的对象不希望被用户选中,也是通过修改policy来实现的。具体如下:

editpart实现

public class BoardPart extends ContainerPart { protected void createEditPolicies() { super.createEditPolicies(); installEditPolicy(EditPolicy.LAYOUT_ROLE, new BoardLayoutEditPolicy()); } }

policy实现

public class BoardLayoutEditPolicy extends XYLayoutEditPolicy { ... protected Command createChangeConstraintCommand(EditPart child, Object constraint) { return null; } ... }

从上面的代码可以看出,只要createChangeConstraintCommand()返回null,那么容器元素就不会被选中。

Eclipse GEF常用技巧(2)

时间:2011-09-09

3、如果一个或多个图元的属性校验出错,希望自动选中,那么考虑对界面元素进行校验,然后使用下面的方法:

/** * 选中未做关联的显示框 * @param errorEls 错误显示框ArrayList */ private void selectErrors(ArrayList<ElementView> errorEls) { EditPartViewer viewer = getGraphicalViewer(); viewer.deselectAll(); //去掉所有选择项 EditPart last = null; for(ElementView element:errorEls) { EditPart editpart = (EditPart) viewer.getEditPartRegistry().get(element); viewer.appendSelection(editpart); //添加选择元素 last = editpart; } viewer.reveal(last); //将最后选中元素放到窗口可视区域 }

4、退出编辑器时提示保存

根据国际惯例,编辑器退出却未保存时,一般都会弹出对话框提示用户选择是否关闭编辑器。这时我首先想到的是覆盖父类的dispose()方法,判断未保存就返回而不退出。可实践证明,eclipse RCP并不支持这样做。经过一番探索得知,需要实现ISaveablePart2接口,在promptToSaveOnClose()添加处理。代码如下:

@Override public int promptToSaveOnClose() { if(this.isDirty && !UIHelper.comfirm("关闭提示", title + "还未保存,确定退出?")) return ISaveablePart2.CANCEL; else return ISaveablePart2.NO; }

5、鼠标拖动自动调用选择工具

处理此问题要从画布元素的editpart类入手。第一步修改createFigure()方法:

protected IFigure createFigure() { ... fig.setOpaque(true); return fig; }

Eclipse GEF常用技巧(3)

时间:2011-09-09

第二步覆盖getDragTracker()方法:

public DragTracker getDragTracker(Request request) { if (request instanceof SelectionRequest && ((SelectionRequest) request).getLastButtonPressed() == 3) { return new DeselectAllTracker(this); } return new MarqueeDragTracker(); }

两个方法配合使用,否则无法达到目的。

6、如何通过editpart修改editor保存状态(不通过setDirty()实现)

由于editpart类是拿不到editor引用的,故想通过调用editor.setDirty()是不可能的。在我的项目中,拖动一个图元是可以触发修改标记,但是拖动连线后editor就不能自动设为修改状态。通过一番研究发现,可以在editpart类中增加如下方法来实现:

public void commit() { getViewer().getEditDomain().getCommandStack().execute(new Command(){}); }

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