我正在用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的問題,這種方法:
- 出於某種原因,節點必須點擊/前(下一次單擊)上下文菜單打開激活。
- 您可以在RAP客戶端中看到,對於不滿足條件「節點instanceof ConnectionNodePage」的頁面,也會打開空的上下文菜單,儘管日誌記錄/調試顯示條件正常工作。我的假設是偵察兵引擎找到匿名的內部菜單類,並做一些不可預知的事情。在SWT客戶端中,您看不到錯誤頁面的上下文菜單。
- 我懷疑我的事件處理使偵察員內部事件處理複雜化。我真的不知道Scout在默認情況下右鍵單擊樹節點時會做什麼類型的事件,但它肯定會做一些我不希望它做的事情。所以我想禁用任何鼠標右鍵單擊操作,除了我上面的自定義實現。
我希望有人向我展示這種機制是如何工作的,以及我必須在哪裏放置相應的更改或至少提示我必須查看的提示。 在此先感謝!