我对我的 RCP 项目有几个看法。
在一个 View 中,我有一个 TableViewer
。
在另一个 View 中,我有一个带有 Button
的 JFrame
。
当我在另一个 View 中按下按钮时,我想使用 setInput()
方法更新 TableViewer
中的数据。
我该怎么做?
编辑:
表查看器的初始输入:
tableViewer.setContentProvider(ArrayContentProvider.getInstance());
tableViewer.setLabelProvider(new TableLabelProvider() );
tableViewer.setInput(TraceData.getTraceData()); // get realtime data
我将监听器添加到 tableViewer 以监听 GUI 中的更改
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);
问题是如何让它对另一个 View 中的按钮事件使用react?这就是如何广播 JButton
按下事件,然后在此 TreeViewer
中监听该事件。
最佳答案
在我的 RCP 应用程序中,我有一个由所有其他类扩展的 View 类。在这个 View 中我有:
abstract void refresh();
现在,您必须通过 TableViewer 使用 View 的刷新方法。
@Override
public void refresh() {
tableViewer.setInput(...);
tableViewer.refresh();
}
并且您必须从按钮调用刷新方法
如何访问其他人的 View 。
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));
}
关于java - Eclipse RCP : TableViewer setInput from another view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26593750/