簡體   English   中英

Eclipse Scout樹視圖事件處理

[英]Eclipse Scout Tree View Event Handling

我目前正在使用Eclipse Scout Framework編寫數據可視化應用程序。 它基於Scout項目模板“概述樹和表格形式”。 讓我感到困惑的是大綱樹中的事件處理。 如您所知,當單擊沒有任何自定義實現的節點時,樹中的不同頁面/節點會自動激活/創建並顯示。 我想將此行為更改為右鍵單擊節點以在第二步中將其刪除時打開上下文菜單的效果。 出於這個原因,我在StandardOutline中覆蓋了“ execNodeClick()”方法,如下所示:

 @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但是,這種方法存在服務器問題:

  1. 由於某些原因,必須在打開上下文菜單之前(下次單擊)單擊/激活節點。
  2. 您可以在RAP客戶端中看到,對於不滿足條件“ ConnectionNodePage的節點實例”的頁面,也打開了空的上下文菜單,盡管記錄/調試表明該條件可以正常工作。 我的假設是,Scout引擎會找到匿名內部菜單類並對其執行某些不可預測的操作。 在SWT客戶端中,看不到錯誤頁面的上下文菜單。
  3. 我懷疑我的事件處理與Scout內部事件處理復雜。 我真的不知道右鍵單擊樹節點時,Scout默認情況下會執行哪種事件處理,但是它確實會執行我不希望執行的操作。 因此,我想禁用鼠標右鍵單擊上除我上面的​​自定義實現以外的任何操作。

我希望有人向我展示此機制的工作原理,以及在何處進行相應的更改,或者至少提示我必須查看的位置。 提前致謝!

真可惜! 當事情變得復雜時,為什么要保持簡單? -.-

要回答我自己的問題並可能幫助其他人,可能會因為樹木而錯過森林:

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

您只需要添加一個內部類,即可將AbtractMenu / AbstractExtensibleMenu擴展到要為其使用上下文菜單的頁面。 Scout會自動計算該內容,以右鍵單擊上下文菜單將其打開到樹中的相應節點。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM