隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊(cè)

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 828791
          • 排名 - 49

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          一、同時(shí)關(guān)閉所有打開的view 
           
          在view中,只有一個(gè)close,每次只能關(guān)閉當(dāng)前窗口
          在eclipse的編輯窗口的標(biāo)題上點(diǎn)右鍵,里面有 close All
          可以使用遍歷的方法,遍歷所有打開的View,然后將其隱藏:
          AsyncUtil.asyncExec(new Runnable()
          {
                 public void run()
                 {
                       IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
                       IViewReference[] iViewReferences = page.getViewReferences();
                       for (IViewReference iViewReference: iViewReferences)
                            if (!ID.equals(iViewReference.getId()))
                                 page.hideView(iViewReference);
                  }
          });   
            二、RCP中產(chǎn)生目標(biāo)區(qū)的Bar 
           
          產(chǎn)生紅線區(qū)域的Bar,實(shí)現(xiàn)方法如下:
          1、這個(gè)是perspective,要?jiǎng)?chuàng)建多個(gè)perspective,然后設(shè)置某個(gè)為active
          2、在WorkbenchWindowAdvisor中preWindowOpen內(nèi),加下面這段代碼
          public void preWindowOpen() { 
                  IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
                  apiStore.setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR,
                          IWorkbenchPreferenceConstants.TOP_RIGHT);
                  apiStore.setValue(
                          IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
                          false);
           }
          3、需要加 config.setShowPespectivebar(true); 
          三、RCP項(xiàng)目--窗口關(guān)閉事件 
          在ApplicationWorkbenchWindowAdvisor中override
          public boolean preWindowShellClose() {
                  // do nothing, but allow the close() to proceed
                  MessageBox msgBox = new MessageBox(new Shell(), SWT.YES|SWT.NO|SWT.ICON_QUESTION);
                  msgBox.setText("退出系統(tǒng)");
                  msgBox.setMessage("確定退出系統(tǒng)?");
                  if(msgBox.open()==SWT.YES){
                      return true;
                  }
                  return false;
              }
          以后使用IWorkbenchWindow的getShell().close();都會(huì)調(diào)用該處代碼.  
          四、在RCP中設(shè)計(jì)界面適合桌面大小 
           
          final int screenWidth = Display.getCurrent().getBounds().width;
          final int screenHeight = Display.getCurrent().getBounds().height;
           
          五、Treeviewer中通過代碼,選中樹上的某個(gè)node節(jié)點(diǎn) 
          StructuredSelection sel=new StructuredSelection(node);
           tree.setSelected(sel); 
          六、TreeViewer實(shí)現(xiàn)雙擊展開、關(guān)閉 
          private class DoubleEventPro implements MouseListener {
                  public void mouseDoubleClick(MouseEvent e) {
                      TreeItem item = viewer.getTree().getItem(new Point(e.x, e.y));

                      if (item != null && item.getItem(0).getText().trim().length() == 0) {
                          viewer.expandToLevel(item.getData(), 1);
                          return;
                      }

                      if (item != null && item.getItemCount() > 0
                              && item.getItem(0).getText().trim().length() > 0) {
                          item.setExpanded(!item.getExpanded());
                      }
                  }

                  public void mouseDown(MouseEvent e) {
                  }
                  public void mouseUp(MouseEvent e) {

                  }
              } 
          七、 如何屏蔽掉視圖窗口上的右鍵彈出菜單?


          方法一:在 postWindowOpen() 中執(zhí)行下面語句:
          PlatformUI.getWorkbench().getDisplay().addFilter(SWT.MouseUp, new Listener() {
              public void handleEvent(final Event event) {
                  if(event.widget == your editor && event.button == 3) {
                      int hwndCursor = OS.GetCapture ();
                      OS.PostMessage(hwndCursor, OS.WM_LBUTTONDOWN, hwndCursor, OS.HTCLIENT | (OS.WM_MOUSEMOVE << 16));
                  }
              }
          });

          其它:org.eclipse.ui.internal.presentations.util包中的StandardViewSystemMenu類控制著這些菜單,還沒來得急仔細(xì)研究,研究過后再補(bǔ)充

          八、在使用tableviewer的時(shí)候?qū)氪罅繑?shù)據(jù)的問題

          創(chuàng)建了一個(gè)tableviewer,然后使用setInput方法導(dǎo)入數(shù)據(jù),如果數(shù)據(jù)量很大的話根本就無效率可言了,以下是幾種解決的方法:

          方法一:通過移動(dòng)滾動(dòng)條來達(dá)到自動(dòng)加載的目的,在滾動(dòng)條的事件中加入翻頁的代碼,可以參考《Eclipse從入門到精通》第二版的P383

          方法二:分頁顯示(http://www.eclipseworld.org/bbs/read-cec-tid-11678-keyword-table.html

          方法三:使用 Virtual Tables,JFace3.2的Viewer已經(jīng)支持SWT.VIRTUAL樣式
          http://www.eclipse.org/articles/Article-SWT-Virtual/Virtual-in-SWT.html

          1 int COUNT = 10000;
          2 final String [] itemStrings = new String [COUNT];
          3 for (int i = 0; i < COUNT; i++) {
          4   itemStrings = "item " + i;
          5 }
          6 final Table table = new Table(parent, SWT.BORDER | SWT.VIRTUAL);
          7 table.addListener(SWT.SetData, new Listener() {
          8   public void handleEvent(Event event) {
          9     TableItem item = (TableItem)event.item;
          10     int index = event.index;
          11     item.setText(itemStrings [index]);
          12   }
          13 });
          14 table.setItemCount(COUNT);

          九、在透視圖快捷方式欄中同時(shí)顯示多個(gè)透視圖快捷方式

          如果在程序中做了多個(gè)個(gè)透視圖,默認(rèn)只顯示初始透視圖快捷方式,每次都要 打開透視圖——other,特麻煩,所以,一下提供兩種方法:

          1、在切換欄中顯示
          public class PIMWorkbenchAdvisor extends WorkbenchAdvisor {
              @Override
              public void postStartup() {
                  super.postStartup();
                  IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                  //2007.01.11 設(shè)置同時(shí)顯示多個(gè)透視圖標(biāo)
                  PerspectiveBarManager barManager=((WorkbenchWindow)activeWorkbenchWindow).getPerspectiveBar();
                  if(barManager != null){
                      IPerspectiveDescriptor mailPerspective = WorkbenchPlugin.getDefault().getPerspectiveRegistry   ().findPerspectiveWithId("MyWork_mail.perspective");
                      PerspectiveBarContributionItem item=new PerspectiveBarContributionItem(mailPerspective,activeWorkbenchWindow.getActivePage());
                      barManager.addItem(item);
                  }
          }
          2、在下拉框中(shortcut)顯示
          public class UiPerspective implements IPerspectiveFactory
          {
              public void createInitialLayout(IPageLayout layout){
          ....
                  //增加透視圖
                  layout.addPerspectiveShortcut("net.sf.pim.plugin.UiPerspective");
                  layout.addPerspectiveShortcut("MyWork_mail.perspective");
                 }
          }
          十、控制“最近打開文檔”的個(gè)數(shù)
                 RCP中在繼承ActionBarAdvisor的類中定義:
                 private IContributionItem reOpenAction = ContributionItemFactory.REOPEN_EDITORS.create(window);
                 然后在fillMenuBar(IMenuManager menuBar)方法中添加上面的aciton
                 運(yùn)行時(shí)“最近打開的文檔”只有4個(gè),如果想自己控制“最近打開的文檔”的數(shù)量,則設(shè)置一下Workbench中的初始化首選項(xiàng)時(shí)RECENT_FILES的默認(rèn)參數(shù)值如:
          WorkbenchPlugin.getDefault().getPreferenceStore().setDefault(IPreferenceConstants.RECENT_FILES,10);

          十一、設(shè)置Eclipse RCP程序的外觀和首選項(xiàng)
                 RCP應(yīng)用程序的缺省外觀是一個(gè)空白窗口,一般我們要通過一個(gè)WorkbenchAdvisor類對(duì)界面進(jìn)行定制。 WorkbenchAdvisor有很多回調(diào)方法,可以在preWindowOpen()方法里設(shè)置菜單、工具條、狀態(tài)欄、進(jìn)度欄、透視圖切換工具是否可 見,在fillActionBars()方法里添加菜單和工具條項(xiàng),在getInitialWindowPerspectiveId()方法里指定首選的 透視圖。

                 缺省情況下,透視圖切換工具位于窗口左上角,在Eclipse里可以通過Window->Preferences-> Workbench->Appearance改變它的位置,那么怎樣用程序控制它呢?有兩個(gè)方法,第一個(gè)是使用如下代碼設(shè)置 IPreferenceStore中的變量:

          IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
          apiStore.setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR, IWorkbenchPreferenceConstants.TOP_RIGHT);
          另一個(gè)方法是在plugin所在目錄建一個(gè)名為plugin_customization.ini的文件,里面寫如下內(nèi)容:

          your.plugin.id/DOCK_PERSPECTIVE_BAR=topRight
          其他與plugin相關(guān)的Preference值可以用同樣方法設(shè)置。

          Update:在最新的Eclipse 3.1M5a版本中,對(duì)RCP應(yīng)用程序菜單和工具條的定制方法有所改變,應(yīng)該使用新加入的ActionBarAdvisor類來完成此項(xiàng)工作。

          十二、獲得自己開發(fā)的plugin被安裝的目錄
            /** *//**
               * @return 本插件的安裝路徑
               */
              public String getInstallDir() ...{
                  if (installPath == null) ...{
                      URL localUrl = null;
                      try ...{
                          localUrl = FileLocator.toFileURL(getDefault().getBundle()
                                  .getEntry("/"));
                          installPath = localUrl.getFile().substring(1);
                      } catch (Exception e) ...{
                          log(e);
                      }
                  }
                  return installPath;
              }

          轉(zhuǎn)自http://duguanglong002.blog.163.com/blog/static/26955626200955415545/



          posted on 2009-07-27 13:46 Ke 閱讀(2297) 評(píng)論(0)  編輯  收藏 所屬分類: eclipse RCP
          主站蜘蛛池模板: 平潭县| 中西区| 嵩明县| 特克斯县| 灵璧县| 镇坪县| 太白县| 新巴尔虎左旗| 虹口区| 双城市| 电白县| 离岛区| 滁州市| 余江县| 自贡市| 江安县| 梅州市| 诸城市| 琼结县| 五华县| 岳阳县| 昌邑市| 涞源县| 扶风县| 罗田县| 内丘县| 伽师县| 章丘市| 花莲县| 信宜市| 安溪县| 遵义市| 长乐市| 黔江区| 桃园县| 绩溪县| 苍山县| 大理市| 安康市| 元江| 浑源县|