2015-09-29 3 views
0

В настоящее время я пишу приложение визуализации данных с помощью 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 проблема с этим подходом:

  1. По некоторым причинам узлов должны быть щелкнули/активировать до (следующий раза щелкнув) открываются контекстное меню.
  2. В клиенте RAP вы можете видеть, что пустые контекстные меню также открыты для страниц, которые не удовлетворяют условию «node instanceof ConnectionNodePage», хотя регистрация/отладка показывает, что условие работает нормально. Мое предположение заключается в том, что движок Scout находит анонимный внутренний класс меню и делает с ним что-то непредсказуемое. В SWT-клиенте вы не видите контекстные меню для неправильных страниц.
  3. Я подозреваю, что мое управление событиями усложняется внутренней обработкой событий Scout. Я действительно не знаю, что такое обработчик событий по умолчанию, когда щелчок правой кнопкой мыши по узлам дерева, но он определенно делает то, что я не хочу делать. Поэтому я хотел бы отключить любое действие с помощью мыши правой кнопкой мыши, кроме моей пользовательской реализации выше.

Буду признателен, если кто-нибудь покажет мне, как работает этот механизм, и где я должен поместить соответствующие изменения или хотя бы намек на то, что мне нужно посмотреть. Спасибо заранее!

ответ

2

Позор на меня! Зачем держать вещи просто, когда они могут быть сложными ..? -.-

Чтобы ответить на мой собственный вопрос и, возможно, чтобы помочь другим, возможно, не хватает лес за деревьями:

Затмения Scout предлагает встроенную опцию, чтобы добавить контекстное меню для страниц/узлов без необходимости выполнения какой-либо управление событиями мыши.

Вам просто нужно добавить внутренний класс, расширяющий AbtractMenu/AbstractExtensibleMenu на страницу, для которой вы хотите использовать контекстное меню. Scout вычисляет это автоматически для открытия в контекстном меню контекстного меню для соответствующего узла в дереве.

Для минимальной реализации меню вам нужно только переопределить метод AbstractAnu() для выполнения действий после нажатия и переопределения метода getConfiguredText() для установки желаемого текста дисплея для меню в новом классе меню. Таким образом, вы избегаете странного поведения, которое я нашел с моим первым подходом.

Я надеюсь, что этот ответ спасет кого-то в те часы, которые я потратил впустую.

 Смежные вопросы

  • Нет связанных вопросов^_^