【插件开发】—— 13 GEF双击模型事件

前文回顾: 1 插件学习篇简单的建立插件工程以及模型文件分析利用扩展点,开发透视图SWT编程须知SWT简单控件的使用与布局搭配SWT复杂空间与布局搭配SWT布局详解IPreferenceStore使用详解编辑器代码着色 10 JFace开发 11 GEF监听 12 GEF入门

  由于GEF的架构过于庞大,对于新手来说确实不易。而对于GEF典型的应用场景,模型拖拽编辑,一个常用的操作方式就是双击模型弹出对话框进行编辑。但是由于模型是我们自己定义的,如何双击模型产生事件这个就点摸不着头脑了。

  由于GEF的模型都是我们自定义的,因此根本不具有双击的方法。但是可以通过其他的渠道来达到目的。

  下面介绍两种常见的双击模型,产生响应的方法:

  第一种 performRequest

  在模型对应的EditPart中添加performRequest方法,捕捉事件

 public void performRequest(Request req) {         
     if(req.getType().equals(RequestConstants.REQ_OPEN)){  
     MessageDialog.openInformation(getViewer().getControl().getShell(),"Gef Practice","A Dialog");
    }
 }

  这种方法时从八进制的博客中学习的。其中RequestConstants还有很多常量,可以多关注一下。

  第二种,就是在Editor类中,对整个viewer添加双击事件监听

  首先我们需要定义一个接口

1 public interface IDoubleClickSupport {
2  
3  public void doubleClicked();
4  
5 }

  继承这个接口的模型,都需要实现一个doubleClicked方法。

  然后,需要在Editor.java中添加监听事件

 1 protected void initializeGraphicalViewer() {
 2   viewer = getGraphicalViewer();    
 3 ....
 4     viewer.getControl().addMouseListener(new MouseAdapter(){
 5      public void mouseDoubleClick(MouseEvent e){
 6       IStructuredSelection selection = (IStructuredSelection)getGraphicalViewer().getSelection();
 7       Object obj = selection.getFirstElement();
 8       if(obj!=null && obj instanceof IDoubleClickSupport){
 9         ((IDoubleClickSupport)obj).doubleClicked();
10       }
11      }
12   });
13 
14 }

  这里通过调用getGraphicalViewer().getSelection()可以获得点击的对象,如果这个对象属于我们自己定义的接口,就会触发双击事件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JadePeng的技术博客

Latex 公式在线可视化编辑器

寻觅 最近的一个demo需要用到Latex公式在线编辑器,从搜索引擎一般会得到类似http://latex.codecogs.com/eqneditor/edi...

1K6
来自专栏linux驱动个人学习

分支预测

分支预测( Branch predictor):当处理一个分支指令时,有可能会产生跳转,从而打断流水线指令的处理,因为处理器无法确定该指令的下一条指令,直到分支...

1081
来自专栏Echo is learning

arcpy 常用操作

1732
来自专栏ATYUN订阅号

最新!TensorFlow 1.9.0正式版发布

TensorFlow 1.9.0正式版发布了,下面是更新和改进的细节,更详细的信息请到网站查阅:github.com/tensorflow/tensorflow...

1562
来自专栏Jerry的SAP技术分享

用代码判断当前系统是否支持某个版本的feature

JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9乃至JDK10的支持,比如Tomcat。

1392
来自专栏有趣的django

Django+Bootstrap+Mysql 搭建个人博客(一)

1.7K0
来自专栏desperate633

LintCode 不同的路径 II 题目分析代码

"不同的路径" 的跟进问题: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用 1 和 0 来表示。

743
来自专栏深度学习思考者

DL开源框架Caffe | 目标检测Faster-rcnn训练自己数据问题整理

数据集制作   Pascal_voc数据集可以做目标检测,目标分割,识别等任务,本文主要针对目标检测的任务,因此只需要其中几个文件夹,也就是我们制作自己的数据集...

2857
来自专栏跟着阿笨一起玩NET

winform 在指定目录下已经生成资源Image图片的方式

假设在项目目录下存在一个Image目录,注意其中图片已经都设置成为:生成方式为资源文件。

1882
来自专栏JackieZheng

可视化(番外篇)——在Eclipse RCP中玩转OpenGL

  最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl...

2125

扫码关注云+社区

领取腾讯云代金券