0

我想在 RCP 中创建 tableviewer,但我不知道如何获得“复合父级”。我有这个代码:

@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。如何得到它?

4

1 回答 1

0

最好的方法是使用事件代理发送另一部分可以监听的事件。这样你就不需要引用另一部分了。

要发送事件:

@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在初始化部件时,您可能会使用set to调用该方法,null因此请检查该方法。

方法名称可以是您喜欢的任何名称。

@UIEventTopic强制事件到达 UI 线程。@EventTopic如果您不关心线程,请使用。

主题名称可以是您选择的任何名称,但它必须包含/分隔符,如图所示。

教程中有更多详细信息。

于 2018-07-05T10:43:23.040 回答