Eclipse RCP 如何获得复合父级

Eclipse RCP how to get composite parent

我想在 RCP 中创建 table 查看器,但我不知道如何获取 "Composite parent"。我有这个代码:

@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));
}

它在我的部分创建table视图,并在table位置添加DoubleClickListener。现在我想在另一个 class 中创建函数 createComposite,我想在双击后激活它,但是我没有 "Composite parent" 因为它不是 @PostConstruct。如何获得?

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

发送事件:

@Inject
IEventBroker eventBroker;

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

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

要侦听事件,请在要侦听的 class 中包含这样的方法(假设 class 是通过注入创建的):

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

您可能会在零件初始化时调用 value 设置为 null 的方法,因此请检查一下。

方法名可以随便起。

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

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

this 教程中有更多详细信息。