我目前正在使用Eclipse Scout Framework编写数据可视化应用程序。它基于Scout项目模板“Outline Tree and Table Form”。 令我困惑的是大纲树中的事件处理。您可能知道,在没有任何自定义实现的情况下单击节点时,将自动激活/创建和显示树中的不同页面/节点。我想更改此行为,以便在右键单击节点以在第二步中删除它时打开上下文菜单。 出于这个原因,我已经覆盖了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然而,这种方法存在几个问题:
我很感激有人向我展示这种机制是如何运作的,以及我必须在哪里进行相应的更改或者至少我需要查看的提示。 提前谢谢!
答案 0 :(得分:2)
对我感到羞耻!为什么在它们变得复杂时保持简单..? -.-
回答我自己的问题,也许是为了帮助别人可能错过树林:
Eclipse Scout提供了一个内置选项,可以向页面/节点添加上下文菜单,而无需实现任何自己的鼠标事件处理。
您只需添加一个内部类,将AbtractMenu / AbstractExtensibleMenu扩展到您想要上下文菜单的页面。 Scout会自动将其计算为右键单击上下文菜单打开到树中的相应节点。
对于最小的菜单实现,您只需要覆盖AbstractMenu的execAction()方法,以便在单击并覆盖getConfiguredText()方法后执行操作,以便为新菜单类中的菜单设置所需的显示文本。 通过这种方式,您可以避免我在第一种方法中发现的奇怪行为。
我希望这个答案可以节省一些人浪费的时间。