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

  

前文回顾:

插件学习篇

简单的建立插件工程以及模型文件分析

利用扩展点,开发透视图

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()可以获得点击的对象,如果这个对象属于我们自己定义的接口,就会触发双击事件。

  参考:

  八进制博客

  AmaterausERD源码

原文地址:https://www.cnblogs.com/xing901022/p/4111363.html