【问题标题】:How to get the view by viewId in RCP?如何通过 RCP 中的 viewId 获取视图?
【发布时间】:2014-06-24 03:08:15
【问题描述】:

如何在 RCP 中通过 viewId 获取视图?然后如何重绘视图? 我想实现一个功能,当我单击列表中的一个项目时,相关视图将重绘并调用函数'createPartControl'。我知道视图的id。那么我怎样才能得到它呢?

这是视图的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++){
        ......

【问题讨论】:

    标签: eclipse view rcp


    【解决方案1】:

    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
      }
    }
    

    【讨论】:

    • 如果我在 myView 中创建一个函数,那么如何让 Composite 像 'createPartControl(Composite parent)' 一样添加它?
    • 你应该在你的类中创建你的控件字段,这样你就可以从所有方法中访问它们——查看更新的答案
    【解决方案2】:

    这是第一个问题的答案。

    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
                IViewPart view = page.findView("BIT_DEC.graphView");
    

    第二个问题现在困扰着我。

    【讨论】:

      【解决方案3】:

      活动工作台窗口可能为空(在调试时发生在我身上)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 2011-01-14
        • 1970-01-01
        相关资源
        最近更新 更多