前文回顧:
1 插件學習篇
4 SWT編程須知
7 SWT布局詳解
9 編輯器代碼着色
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源碼