zoukankan      html  css  js  c++  java
  • 【插件开发】—— 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源码

  • 相关阅读:
    XML Schema (1)
    xml
    java输入输出流(内容练习)
    Java中I/O的分析
    java File类
    java中Map的用法(HaspMap用法)
    Git
    oracle安装分析
    博客第一天
    正则化 L1 L2
  • 原文地址:https://www.cnblogs.com/xing901022/p/4111363.html
Copyright © 2011-2022 走看看