2015-09-29 41 views
0

我正在用Eclipse Scout Framework編寫數據可視化應用程序。它基於偵察兵項目模板「大綱樹和表格」。 讓我困惑的是大綱樹中的事件處理。正如您可能知道的那樣,在沒有任何自定義實現的情況下單擊節點時,樹中的不同頁面/節點會自動激活/創建並顯示。我想要改變這種行爲,以便在第二步中右鍵單擊某個節點時刪除上下文菜單。 出於這個原因我已經覆蓋了「execNodeClick()」方法在StandardOutline看起來像這樣:Eclipse偵察樹視圖事件處理

@Override 
    protected void execNodeClick(ITreeNode node, MouseButton mouseButton) throws ProcessingException { 
    if (mouseButton == MouseButton.Right && node instanceof ConnectionNodePage) { 
     ConnectionNodePage clickedConnectionNode = (ConnectionNodePage) node; 
     logger.debug("Right click on ConnectionNode " + node); 
     List<AbstractMenu> menuList = new ArrayList<>(); 
     menuList.add(new AbstractMenu() { 
     @Override 
     protected String getConfiguredText() { 
      // TODO Auto-generated method stub 
      return "delete"; 
     } 
     @Override 
     protected void execAction() throws ProcessingException { 
      ServerConfigService serverConfigService = SERVICES.getService(ServerConfigService.class); 
      serverConfigService.removeServerConnection(clickedConnectionNode.getConnection()); 
      StandardOutline.this.removeChildNode(StandardOutline.this.getRootNode(), clickedConnectionNode); 
     } 
     }); 
     clickedConnectionNode.setMenus(menuList); 
    } 
    } 

我不知道這是否是推薦的方式動態地添加一個上下文菜單樹節點,但它的工作原理莫名其妙:P不過,也有serveral的問題,這種方法:

  1. 出於某種原因,節點必須點擊/前(下一次單擊)上下文菜單打開激活。
  2. 您可以在RAP客戶端中看到,對於不滿足條件「節點instanceof ConnectionNodePage」的頁面,也會打開空的上下文菜單,儘管日誌記錄/調試顯示條件正常工作。我的假設是偵察兵引擎找到匿名的內部菜單類,並做一些不可預知的事情。在SWT客戶端中,您看不到錯誤頁面的上下文菜單。
  3. 我懷疑我的事件處理使偵察員內部事件處理複雜化。我真的不知道Scout在默認情況下右鍵單擊樹節點時會做什麼類型的事件,但它肯定會做一些我不希望它做的事情。所以我想禁用任何鼠標右鍵單擊操作,除了我上面的自定義實現。

我希望有人向我展示這種機制是如何工作的,以及我必須在哪裏放置相應的更改或至少提示我必須查看的提示。 在此先感謝!

回答

2

對我感到羞恥!爲什麼保持簡單,當他們可以複雜..? -.-

回答我的問題,也許是爲了幫助其他人可能錯過了樹不見林:

Eclipse的偵察兵提供了一個內置的選項,添加上下文菜單頁/節點,而無需實現任何自己的鼠標事件處理。

您只需添加一個將AbtractMenu/AbstractExtensibleMenu擴展到您想要上下文菜單的頁面的內部類。 Scout會自動計算這個值,作爲右鍵上下文菜單打開到樹中相應的節點。

對於最小菜單實現,只需重寫AbstractMenu的execAction()方法即可在單擊並重寫getConfiguredText()方法後爲執行操作設置新菜單類中菜單的所需顯示文本。 這樣可以避免我用第一種方法找到的奇怪行爲。

我希望這個答案可以節省一些我浪費的時間。