gpt4 book ai didi

java - Eclipse Scout TreeView 事件处理

转载 作者:行者123 更新时间:2023-12-02 04:20:26 25 4
gpt4 key购买 nike

我目前正在使用 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() 方法以在新菜单类中设置菜单所需的显示文本。这样你就可以避免我在第一种方法中发现的奇怪行为。

我希望这个答案能够帮助其他人节省我浪费的时间。

关于java - Eclipse Scout TreeView 事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32842200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com