В Eclipse RCP я создаю представления для перспективы, используя IPageLayout.addView(...)
Но таким образом у меня нет ссылки на представление. Поэтому я не знаю, как я могу сказать ViewA обновить ViewB.
Какой шаблон лучше всего использовать здесь?
В Eclipse RCP я создаю представления для перспективы, используя IPageLayout.addView(...)
Но таким образом у меня нет ссылки на представление. Поэтому я не знаю, как я могу сказать ViewA обновить ViewB.
Какой шаблон лучше всего использовать здесь?
Помимо того, что VonC упомянул выше, вы также можете использовать ISourceProviderListener
, если необходимые вам изменения не запускаются выбором.
ViewB
реализует ISourceProviderListener
ISourceProvider
и зарегистрируйте ее в сервисахViewA
получить ISourceProvider
и обновить его, чтобы активировать изменения в ViewB
.Прочтите документацию по этим интерфейсам вместе с IServiceLocator
и ISourceProviderService
, чтобы лучше понять, как все это работает.
Вы также можете ознакомиться с руководством Ларса Фогеля, в котором есть несколько примеров использования ISourceProvider
ISourceProviderListener
: Я пропустил это. Тоже хорошее решение. +1. И теперь это будет Помимо того, что VonC упомянул ниже ;)
- person VonC; 09.02.2010
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 г.)
Существуют разные способы взаимодействия между представлениями и плагинами: eventbroker, listener и т. д.
Реализация EvenBroker (e4): используйте брокер событий для отправки сообщения (строки) между представлениями и плагинами.
Сторона отправителя:
@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
}
STATUS
(просто иметь ее как public static final String
и ссылаться на нее как от отправителя, так и от получателя), но в остальном это способ пойти в e4. Кстати, вы можете отправлять таким образом любой объект, а не только строки, и если вы хотите, чтобы это происходило асинхронно, используйте broker.post()
вместо broker.send()
.
- person Amos M. Carpenter; 21.04.2016