【插件开发】—— 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源码

时间: 2024-10-13 21:56:33

【插件开发】—— 13 GEF双击模型事件的相关文章

整理之DOM事件阶段、冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件

整理之DOM事件阶段 本文主要解决的问题: 事件流 DOM事件流的三个阶段 先理解流的概念 在现今的JavaScript中随处可见.比如说React中的单向数据流,Node中的流,又或是今天本文所讲的DOM事件流.都是流的一种生动体现.用术语说流是对输入输出设备的抽象.以程序的角度说,流是具有方向的数据. 事件流分事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其

2012.8.13 onEnter与触摸事件

之前做了个demo,发现在init中初始化触摸事件,始终没有监听到.后来查资料发现.是因为我重新了onEnter方法.但是在onEnter方法中没有调用父类的初始化方法导致的.添加后触摸正常.去看一下父类方法.发现 哎.  不熟悉啊 2012.8.13 onEnter与触摸事件

【laravel】Eloquent 模型事件和监听方式

所有支持的模型事件 在 Eloquent 模型类上进行查询.插入.更新.删除操作时,会触发相应的模型事件,不管你有没有监听它们.这些事件包括: retrieved 获取到模型实例后触发 creating 插入到数据库前触发 created 插入到数据库后触发 updating 更新到数据库前触发 updated 更新到数据库后触发 saving 保存到数据库前触发(插入/更新之前,无论插入还是更新都会触发) saved 保存到数据库后触发(插入/更新之后,无论插入还是更新都会触发) deleti

模型事件注意点,before_delete、after_delete、before_write、after_write、before_update、after_update、before_insert、after_insert

模型类支持before_delete.after_delete.before_write.after_write.before_update.after_update.before_insert.after_insert事件行为 使用方法如下: User::event('before_insert', function ($user) { if ($user->status != 1) { return false; } }); 注意:要触发模型事件不能使用where方法,因为使用where方法

js区分鼠标单双击 阻止事件冒泡

function clickOrDblClick(obj) { count++; if (obj != undefined) { var rowStr = $.trim($(obj).find("td:eq(1)").text().replace(/※/g, '')); currentRowpm = rowStr; } timer = window.setTimeout(function(obj) { var currentTr = $("#tbMainDeputy"

13. javacript高级程序设计-事件

1. 事件 1.1 事件流 事件流描述的是从页面中接受事件的顺序,IE的事件是冒泡流,而Netscape Communicator的事件流是事件捕捉流. 1.1.1 事件冒泡 <!DOCTYPE html> <html> <title>xxx</title> <body> <div id="myDiv">click me</div> </body> </html> 如果你点击了页

【VBA编程】13.Workbook对象的事件

Workbook事件用于响应对Workbook对象所进行的操作. [BeforeClose事件] BforeClose事件用于响应窗口关闭的操作 在工程资源器中,双击"ThisWorkbook"对象,弹出"ThisWorkbook"窗口,并且选择Workbook,BeforeClose 并在窗口中写下如下代码:[代码区域] Private Sub Workbook_BeforeClose(Cancel As Boolean) If ThisWorkbook.Save

android 13 5种click事件不同实现方式 比较

第一种:不便于管理. <Button android:id="@+id/btn_Gridlayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="用网格布局实现注册" android:onClick="gridLayout"/> public class MainA

GestureDetector.OnGestureListener接口实现点击双击滑动事件

public class MyGesture extends Activity implements OnTouchListener, OnGestureListener { private GestureDetector mGestureDetector; public MyGesture() { mGestureDetector = new GestureDetector(this); } public void onCreate(Bundle savedInstanceState) { s