如何通过RCP中的viewId获取视图?

时间:2014-05-07 08:33:06

标签: eclipse view rcp

如何通过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++){
        ......

3 个答案:

答案 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;
            }