В настоящее время я пишу приложение визуализации данных с помощью Eclipse Scout Framework. Он основан на шаблоне проекта Scout «Контурное дерево и форма таблицы». Что меня смущает, это обработка событий в контурном дереве. Как вы знаете, разные страницы/узлы в дереве автоматически активируются/создаются и отображаются при нажатии на узлы без какой-либо пользовательской реализации. Я хочу изменить это поведение на то, что контекстное меню открывается при щелчке правой кнопкой мыши по узлу, чтобы удалить его на втором шаге. По этой причине я перезаписать «execNodeClick()» метод в StandardOutline выглядеть следующим образом:Eclipse Scout Tree View Обработка событий
@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);
}
}
Я не знаю, является ли рекомендуемый способ динамического добавления в контекстное меню Дерева Node, но он работает как-то: P Однако, есть Serveral проблема с этим подходом:
- По некоторым причинам узлов должны быть щелкнули/активировать до (следующий раза щелкнув) открываются контекстное меню.
- В клиенте RAP вы можете видеть, что пустые контекстные меню также открыты для страниц, которые не удовлетворяют условию «node instanceof ConnectionNodePage», хотя регистрация/отладка показывает, что условие работает нормально. Мое предположение заключается в том, что движок Scout находит анонимный внутренний класс меню и делает с ним что-то непредсказуемое. В SWT-клиенте вы не видите контекстные меню для неправильных страниц.
- Я подозреваю, что мое управление событиями усложняется внутренней обработкой событий Scout. Я действительно не знаю, что такое обработчик событий по умолчанию, когда щелчок правой кнопкой мыши по узлам дерева, но он определенно делает то, что я не хочу делать. Поэтому я хотел бы отключить любое действие с помощью мыши правой кнопкой мыши, кроме моей пользовательской реализации выше.
Буду признателен, если кто-нибудь покажет мне, как работает этот механизм, и где я должен поместить соответствующие изменения или хотя бы намек на то, что мне нужно посмотреть. Спасибо заранее!