`
streamfly
  • 浏览: 88483 次
社区版块
存档分类
最新评论

实现 RCP 中 VIEW 视图 全窗口 显示

阅读更多
最近做产品用到了这一功能,说实话让我头疼了好一会。不过还好,偶然让我发现了解决方法,写在这里。

先看下面一段代码:
java 代码
  1. IViewPart viewpart = getSite().getPage().findView(View.ID);  
  2.                 PlatformUI.getWorkbench().getActiveWorkbenchWindow().  
  3. getActivePage().hideView(viewpart);  

上面的代码可以让当前活动的 视图隐藏。这会原理也就差不多清楚了把。那具体怎样样其他视图隐藏呢,代码如下:

java 代码
 
  1. public void run(IAction action)   
  2.     {  
  3.         boolean Flag = false;  
  4.           
  5.         IWorkbenchWindow[] workbechWindows = PlatformUI.getWorkbench().getWorkbenchWindows();  
  6.         for(int i = 0;i
  7.         {  
  8.             IWorkbenchPage[] workbechPages = workbechWindows[i].getPages();  
  9.             for(int j = 0;j
  10.             {  
  11.                 IViewPart mapViewPart = workbechPages[j].findView(View.ID);//保持显示的视图  
  12.                 if(mapViewPart == null)  
  13.                 {  
  14.                     Flag = true;  
  15.                 }  
  16.             }  
  17.             if(Flag)  
  18.             {  
  19.                 for(int j = 0;j
  20.                 {                     
  21.                     IViewPart[] viewParts = workbechPages[j].getViews();  
  22.                     for(int k = 0; k
  23.                     {  
  24.                         workbechPages[j].hideView(viewParts[k]);  
  25.                     }  
  26.                 }  
  27.             }  
  28.         }  
  29.     }  


但经过测试后发现行不通,因为我所在的工程只有一个workbenchWindow,一个workbenchPage.

经过多方查证和实验,总算搞定了,代码如下:

java 代码
  1. public void run(IAction action) {   
  2.         try {   
  3.             window.getActivePage().showView(MapView.ID);   
  4.         }catch (PartInitException e) {   
  5.             e.printStackTrace();   
  6.         }   
  7.            
  8.         IWorkbenchAction action1 = ActionFactory.MAXIMIZE.create(window);   
  9.         action1.run();   
  10.     }  

这里要说明下showView()函数,如果View没有显示,则显示并置为当前活动的view,如果已经显示了,则只把它置为当前活动的view.      ActionFactory.MAXIMIZE.create(window);只对当前活动的view起作用。

 

分享到:
评论
2 楼 streamfly 2010-06-18  
window.getActivePage() 是null不太可能吧,你总要有一个工作页是处于激活状态的。
1 楼 ylc2010 2010-06-09  
window.getActivePage()这里是null怎么办?

相关推荐

Global site tag (gtag.js) - Google Analytics