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 教程中有更多详细信息。
我想在 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 教程中有更多详细信息。