关于GEF-HelloWorld的一些经验

刚刚做完GEF的HelloWorld,写一些东西,怕以后自己忘了。

给palette添加拖拽功能:
添加拖拽功能其实就是给view添加一个Listener。.

一、继承GraphicalEditorWithPalette的实现方法:
a、在initializeGraphicalViewer()中,给view添加Listener。
  1.     protected void initializeGraphicalViewer() {
  2.         ...
  3.         getGraphicalViewer().addDropTargetListener(createTransferDropTargetListener());
  4.     }
b、 createTransferDropTargetListener()方法实现
  1.     /**
  2.      * Create a transfer drop target listener. When using a CombinedTemplateCreationEntry
  3.      * tool in the palette, this will enable model element creation by dragging from the palette.
  4.      * @see #createPaletteViewerProvider()
  5.      */
  6.     private TransferDropTargetListener createTransferDropTargetListener() {
  7.         return new TemplateTransferDropTargetListener(getGraphicalViewer()) {
  8.             protected CreationFactory getFactory(Object template) {
  9.                 return new SimpleFactory((Class) template);
  10.             }
  11.         };
  12.     }
c、重写initializePaletteViewer()方法
  1.     protected void initializePaletteViewer() {
  2.         super.initializePaletteViewer();
  3.         getPaletteViewer().addDragSourceListener(
  4.                 new TemplateTransferDragSourceListener(getPaletteViewer()));
  5.     }
d、在getPaletteRoot()方法中修改创建图形的Entry
  1.     protected PaletteRoot getPaletteRoot() {
  2.         ...
  3.         
  4.         CombinedTemplateCreationEntry creationEntry =
  5.             new CombinedTemplateCreationEntry(
  6.             "Draw HelloModel",
  7.             "Create HelloModel",
  8.             HelloModel.class,
  9.             new SimpleFactory(HelloModel.class),
  10.             descriptor, 
  11.             descriptor);
  12.         drawer.add(creationEntry);
  13.         
  14.         ...
  15.     }
注意:从CreationToolEntry改为 CombinedTemplateCreationEntry时,构造函数需要多传一个HelloModel.class的参数。少传了这个参数编译不会报错,但是拖拽到死也不会有图形创建出来。(本人就因为这点没仔细看,耽误了半天时间。不过最后弄出来的时候还是有恍然大悟的感觉。)

二、如果继承了GraphicalEditorWithFlyoutPalette,实现方法就简单一点了:
a -> b - > d

总结:感觉实现Creation的时候有两种,一种是在palette中点选后,点击创建,这时候需要的CreationFactory是在Entry中直接定义的CreationFactoy;而拖拽的话,则是需要在Listner中定义。GEF已经给我们准备好了一个默认的实现类SimpleFactory,大家用就行了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值