Как общаться между представлениями в Eclipse RCP? - PullRequest
14 голосов
/ 09 февраля 2010

В Eclipse RCP я создаю представления для перспективы, используя IPageLayout.addView(...)

Но так у меня нет ссылки на представление. Поэтому я не знаю, как сказать ViewA обновить ViewB.

Какой шаблон лучше использовать здесь?

Ответы [ 3 ]

15 голосов
/ 09 февраля 2010

Помимо того, что VonC упомянул выше, вы также можете использовать ISourceProviderListener, если необходимые изменения не инициируются при выборе.

  • Имеют ViewB орудия ISourceProviderListener
  • Создайте реализацию ISourceProvider и зарегистрируйте ее в сервисах
  • У ViewA получите ISourceProvider и обновите его, чтобы вызвать изменения в ViewB

Прочтите документацию по этим интерфейсам вместе с IServiceLocator и ISourceProviderService, чтобы лучше понять, как все это работает.

Вы также можете увидеть это руководство Ларса Фогеля , в котором есть пример использования ISourceProvider

8 голосов
/ 09 февраля 2010

У вас есть другая парадигма коммуникации, изложенная в статье IBM

  • Чтобы представление могло прослушивать изменения выбора, оно должно реализовывать интерфейс ISelectionListener и регистрироваться на странице рабочего места
  • Использование интерфейса IAdaptable: класс, реализующий IAdaptable, имеет возможность динамически возвращать определенные типы адаптеров, которые затем можно использовать для получения дополнительной информации.
  • парадигма слушателя изменения свойства

Что касается первого подхода, подробности статьи:

Более разумный способ использовать выбор пользовательского интерфейса - зарегистрировать представления потребителей в качестве слушателей определенных частей представления. Как видно из приведенного ниже примера, идентификатор вида исходной части вида упоминается в качестве параметра при регистрации прослушивателя выбора.

  getSite().getPage().addSelectionListener("SampleViewId",(ISelectionListener)this);

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

Фрагмент кода в листинге 2 показывает метод createPartControl() представления, который создает JFace TableViewer и добавляет его в качестве поставщика выбора на сайт рабочей среды. Этот код позволяет любым изменениям пользовательского интерфейса в TableViewer распространяться на страницу и, наконец, на заинтересованные мнения потребителей.

Листинг 2. Настройка поставщика выбора

public void createPartControl(Composite parent) {
    // Set up a JFace Viewer
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    viewer.setSorter(new NameSorter());
    viewer.setInput(getViewSite());

    // ADD the JFace Viewer as a Selection Provider to the View site.
    getSite().setSelectionProvider(viewer);

}

Подобный подход вы найдете в учебнике RCP для eclipse3.5 (обновление 4 февраля 2010 г.)

1 голос
/ 02 апреля 2016

Существуют разные способы просмотра и взаимодействия с плагином: eventbroker, слушатель и т. Д.

EvenBroker (e4) Реализация: Используйте eventbroker для отправки сообщения (строки) между представлениями и плагинами.

Сторона отправителя:

@Inject
private IEventBroker eventBroker; 
private static final String STATUS ="status";
eventBroker.send(STATUS, "status test message..");

Сторона получателя:

@Inject
private IEventBroker eventBroker; 
private static final String STATUS ="status";
@Inject @Optional
public void  getEvent(@UIEventTopic(STATUS) String message) {
    ... //call method 
}
...