Eclipse RCP как получить составного родителя - PullRequest
0 голосов
/ 05 июля 2018

Я хочу создать просмотрщик таблиц в RCP, но я не знаю, как получить «Составной родитель». У меня есть этот код:

@PostConstruct
public void createComposite(Composite parent) {
    Books.generateBooks();
    Map<String, Books> allBooks = Books.returnAllBooks();
    List<String> booksList = new ArrayList<String>(allBooks.keySet());

    tableViewer = new TableViewer(parent);

    for(int i=0; i<booksList.size(); i++) {
        tableViewer.add(booksList.get(i));
    }

    tableViewer.addDoubleClickListener(new IDoubleClickListener() {
        @Override
        public void doubleClick(DoubleClickEvent event) {
            IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
            if (selection.isEmpty()) return;
            BibliotekaSzczegolyPart.createComposite(selection.getFirstElement().toString());
        }
    });
    tableViewer.getTable().setLayoutData(new GridData(GridData.FILL));
}

Создает табличное представление с моей стороны и добавляет DoubleClickListener в позиции таблицы. Теперь я хочу создать функцию createComposite в другом классе, который я хочу активировать после двойного щелчка, но у меня нет «Composite parent», потому что это не @PostConstruct. Как это получить?

1 Ответ

0 голосов
/ 05 июля 2018

Лучший способ сделать это - использовать посредник событий для отправки события, которое может прослушать другая часть. Таким образом, вам не нужна ссылка на другую часть.

Чтобы отправить событие:

@Inject
IEventBroker eventBroker;

String value = .... value you want to send (doesn't have to be a string)

eventBroker.post("/my/topic", value);

Чтобы прослушать событие, включите такой метод в класс, который хочет прослушивать (предполагается, что класс создан путем инъекции):

@Inject
@Optional
public void event(@UIEventTopic("/my/topic") final String value)
{
  if (value != null) {
    // TODO Handle value
  }
}

Вы можете получить вызов метода с value, установленным на null во время инициализации детали, поэтому проверьте это.

Имя метода может быть любым.

@UIEventTopic заставляет событие прибыть в поток пользовательского интерфейса. Используйте @EventTopic, если вам нет дела до темы.

Имя темы может быть любым, но вы должны содержать / разделителей, как показано.

Подробнее в этом руководстве.

...