В моем приложении Eclipse RCP я использую Службу выбора, как описано в этой хорошей статье . Существует TreeViewer в одном представлении, зарегистрированном как SelectionProvider :
getSite().setSelectionProvider(viewer);
Другое представление получает события от TreeViewer :
selectionListener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
pageSelectionChanged(part, selection);
}
};
getSite().getPage().addSelectionListener(selectionListener);
Все работает нормально, если события запускаются моими обычными щелчками мыши. Я хотел бы программно запустить события выбора, выделив элемент в дереве:
treeViewer.setSelection(new StructuredSelection(element),true);
Это не работает. Метод selectionChanged не вызывается в представлении приемника. Проблема обсуждается в этой ветке форума . Нет решения.
РЕДАКТИРОВАТЬ
Не существует надлежащего способа обрабатывать щелчок мышью, аналогичный программному выделению. Щелчок мыши активирует вид, который программно не выделяется.
Мое решение состоит в том, чтобы зарегистрировать второе представление таким же образом на Selection Service
, что и первое представление. После этого оба вида получают события выбора непосредственно из активного редактора.