如何通过RCP中的viewId获取视图?然后如何重绘视图? 我想实现一个功能,当我点击一个项目形成一个列表时,相关的视图将重绘并调用函数' createPartControl'。我知道了视图的id.So我怎样才能得到对吗?
这是视图的createPartControl()
方法。
public void createPartControl(Composite parent) {
// TODO Auto-generated method stub
final List list = new List(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
final ObjDumpParser objdump = new ObjDumpParser();
List<DisFunction> funclist = objdump.getTextFunList();
int funcNum = funclist.size();
System.out.println("123: " + funcNum);
for (int i = 0; i < funcNum; i++){
......
答案 0 :(得分:2)
IWorkbenchPage
有控制视图的方法:
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IViewPart viewPart = page.showView("view id");
在创建视图时将调用部件createPartControl
,在后续调用showView
时不会调用它。
viewPart
将是您的视图类的一个实例,因此您可以添加一个方法来更新视图,如:
MyView myView = (MyView)viewPart;
... call MyView method to update the view
在MyView上显示更新:
public class MyView extends ViewPart
{
private List list;
public void createPartControl(Composite parent)
{
list = new List.....
}
public void update()
{
... update list
}
}
答案 1 :(得分:0)
这是第一个问题的答案。
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IViewPart view = page.findView("BIT_DEC.graphView");
第二个问题现在困扰我。
答案 2 :(得分:0)
Active Workbench窗口可能为null(调试时发生在我身上)。
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (workbenchWindow == null) {
IWorkbenchWindow[] allWindows = PlatformUI.getWorkbench().getWorkbenchWindows();
for (IWorkbenchWindow window : allWindows) {
workbenchWindow = window;
if (workbenchWindow != null) {
break;
}
}
}
if (workbenchWindow == null) {
throw new IllegalStateException("Could not retrieve workbench window");
}
IWorkbenchPage activePage = workbenchWindow.getActivePage();
try {
IViewPart viewPart = activePage.showView(id);
return viewPart;
} catch (PartInitException e) {
String message = "Could not show view " + id;
LOG.warn(message, e);
return null;
}