Eclipse RCP: TableViewer setInput из другого представления

У меня есть несколько представлений в моем проекте RCP.

В одном представлении у меня есть TableViewer.

В другом представлении у меня есть JFrame с Button.

Я хочу обновить данные в TableViewer, используя метод setInput(), когда я нажимаю кнопку в другом представлении.

Как мне это сделать?

РЕДАКТИРОВАТЬ:

Начальный ввод в просмотрщик таблиц:

tableViewer.setContentProvider(ArrayContentProvider.getInstance());
tableViewer.setLabelProvider(new TableLabelProvider() );
tableViewer.setInput(TraceData.getTraceData());     // get realtime data

Я добавляю прослушиватель в tableViewer для прослушивания изменений в графическом интерфейсе.

listener = new ISelectionListener() {
    public void selectionChanged(IWorkbenchPart part, ISelection sel) {
       if (!(sel instanceof IStructuredSelection))
          return;
       IStructuredSelection ss = (IStructuredSelection) sel;
       Object o = ss.getFirstElement();
       if (o instanceof Book) // something else in place of Book
          tableViewer.setInput(TraceData.getSavedTraceData());
    }
 };

getSite().getPage().addSelectionListener(listener);

И проблема в том, как заставить его реагировать на событие кнопки в другом представлении? Вот как транслировать пресс-событие JButton, а затем слушать это событие в этом TreeViewer.


person 2c00L    schedule 27.10.2014    source источник


Ответы (1)


В моем приложении RCP у меня есть класс View, который расширяется всеми остальными. В этом представлении у меня есть:

abstract void refresh();

Теперь вам нужно использовать метод обновления представления с помощью TableViewer.

@Override
public void refresh() {
    tableViewer.setInput(...);
    tableViewer.refresh();
}

И вы должны вызвать метод обновления с кнопки

Как получить доступ к представлению из другого.

final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
final IWorkbenchPage page = window.getActivePage();
try {
    if (page.getActivePart() != null) {
    viewTitle = page.getActivePart().getTitle();
    IViewPart view = page.showView(MainView.ID)  //id de la view in plugin.xml
    page.hideView(page.findView(SitesView.ID));
    }
person Xavier Bouclet    schedule 27.10.2014
comment
Не совсем то, что я имел в виду. Я отредактировал свой пост, чтобы прояснить ситуацию. - person 2c00L; 27.10.2014
comment
Я бы использовал View view = (View) page.findView(View.ID); для доступа к представлению, а затем к методу обновления. Работал на меня. Но может это не лучший способ сделать это. - person Xavier Bouclet; 27.10.2014
comment
Спасибо за ответ. Я не смог найти метод page.findView(). И я также думаю, что слушатели — лучший способ. - person 2c00L; 29.10.2014
comment
Хорошо, на тот случай, если вам нужно получить доступ к представлению по его идентификатору. Смотрите мой пост, я добавил код. - person Xavier Bouclet; 30.10.2014
comment
Оказывается, IEventBroker — лучший способ общения с представлениями, затем я использовал setInput и Refresh, как вы упомянули, так что +1 :) - person 2c00L; 12.11.2014
comment
Спасибо, я поищу IEventBroker. - person Xavier Bouclet; 14.11.2014
comment
Вы можете проверить эту ссылку - person 2c00L; 14.11.2014