【插件開發】—— 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源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM