<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sung in Blog

               一些技術文章 & 一些生活雜碎
    編寫Eclipse插件的方法很簡單,你只需要編寫一個應用程序,并把它"添加"到Eclipse上。但是與編寫音樂類似,在能夠創作一部著作之前,首先必須學習大量的相關知識。
      
      本文將討論少許幾個簡單的GUI元素:
      
      · 工具條按鈕
      
      · 菜單項
      
      · 對話框
      
      為了使用這些元素,我們將稍微修改已有的插件,順便編寫一個可供使用的工具類。
      
      擴展點(Extension Points)
      
      我們不能隨意地向Eclipse用戶界面的任何地方添加窗口小部件,只能在特殊的、指定的、有記載的位置添加。這些位置被稱為擴展點(extension points)。在基本的Eclipse安裝中存在數以百計可供使用的擴展點。插件自身也可以發布新的擴展點。
      
     

      
    圖1:擴展頁

      
      現在請點擊"添加"(ADD)按鈕,出現了圖2所示的列表。
      
     

      
    圖2:新增擴展向導,擴展列表

      
      上下滾動這個列表可以看到很多可供使用的擴展點。你可能注意到了有兩種類型的擴展點:帶有擴展模板的(用加號標識)和不帶擴展模板的。大多數經常用到的擴展點都帶有用于輔助開發擴展的模板。圖2中選擇的擴展點Action Set,帶有一個叫做"Hello World"操作集的模板。當你選擇某個模板的時候,會出現簡短的描述。"下一個"頁面將詢問模板使用的參數。
      
      現在請關閉向導并返回到"擴展"屬性頁。選擇"Invokatron編輯器"。在這個屬性頁中,你可能注意到了我們在向導中為Invokatron編輯器輸入的信息。正常的擴展需要一個唯一的標識符(ID字段)、一個供顯示的名稱(Name字段)和它所屬的擴展點(Point字段)。從模板中建立的擴展(例如Invokatron編輯器)需要更多的參數。沒有模板的擴展點也需要更多的信息,但是這些信息只能在文本編輯器中輸入。
      
      添加工具條按鈕
      
      現在我們已經了解了擴展點是什么,讓我們來添加一個擴展吧。我們首先添加的是一個工具條按鈕。這個按鈕將調用我們前面建立的新的Invokatron向導。
      
      添加工具條按鈕有三個步驟:
      
      1.聲明一個新擴展。
      
      2.用特定的標記來擴充該聲明。
      
      3.編寫操作委托類
      
      1.聲明一個新擴展
      
      我們已經知道怎樣實現這個步驟了。簡單地返回到擴展點下的plugin.xml編輯器。點擊"添加"。工具條按鈕在org.eclipse.ui.actionSets擴展點下面。不要使用模板,直接點擊"完成"。輸入下面一些內容:
      
      · Id: NewInvokatronAction
      
      · Name: New Invokatron Document Action
      
      · Point: (使用默認值:org.eclipse.ui.actionSets)
      
      返回plugin.xml屬性頁,Eclipse給這個文件添加了新的代碼片斷。
      
      2.用特定的標記來擴充該聲明
      
      這個新擴展幾乎毫無內容。我們在下面添加一些標記(tag)。你知道可以使用哪些標記嗎?你可以右鍵點擊"所有擴展"樹中的元素,選擇"新增"菜單,會得到一個列表。你也可以查看Eclipse文檔。
      
      現在我們看到自己可以在<extension>標記內部添加一個<actionSet>標記。它可以包含零個或多個<menu>標記,后面跟著零個或多個<action>標記,還可以選擇使用<description>標記。但是其中最重要的標記是<action>。它可以同時描述工具條按鈕和菜單項。>BR>下面是我們將添加的工具條按鈕的XML代碼片斷。其中的新代碼是黑體的。我們在后面會剖析這段代碼。
      
      <extension id="NewInvokatronAction"
      name="New Invokatron Document Action"
      point="org.eclipse.ui.actionSets">
      <actionSet id="invokatron.actionSet"
      label="Invokatron Actions"
      visible="true">
      <action id="invokatron.wizard.RunWizardAction"
      toolbarPath="org.eclipse.ui.workbench.file/new.ext"
      icon="icons/InvokatronIcon16.gif"
      tooltip="Starts the New Invokatron Document Wizard."
      class="invokatron.wizard.RunWizardAction">
      </action>
      </actionSet>
      </extension>
      
      所有這些操作都可以在plugin.xml編輯器中用圖形化的方式來完成,但是我們查看XML以明確字段的完整文本內容。此處的<actionSet>標記只含有一個操作(action)。操作表現為菜單中的項或工具條中的按鈕的對象。操作的屬性實在太多了,你可以在在線文檔中查閱。其中最有趣的一些屬性是:
      
      · id:操作的唯一標識符。可以用于在運行時引用操作。
      
      · toolbarPath:放置工具條按鈕的位置。
      
      · icon:工具條按鈕或菜單項左側顯示的圖標。它是一個與開發目錄關聯的16×16的GIF文件。請把 圖片存放到Invokatron\icons文件夾中。這個文件夾已經被包含到二進制建立路徑中,因此該圖標將放入插件的文檔目錄中。
      
      · tooltip:當鼠標停留在工具條按鈕上的時候出現的文本內容。
      
      · class:這些操作的完整的合格的類名稱。
      
      關于工具條路徑
      
      工具條路徑(toolbar path)指出了添加工具條按鈕的位置。由于任何人都可以建立工具條,而且有時候一個按鈕可以包含子選項,因此我們用分層的標識符列表來訪問這個位置。下面是經常用到的工具條列表和它們的路徑:
      
      · 文件: org.eclipse.ui.workbench.file 帶有一些公共的分組標志(你可以添加按鈕的更多的位置):
      
      o "新建"區:new.ext
      o "保存"區:save.ext
      o "打印"區:print.ext
      o "建立"區:build.ext
      
      · 導航: org.eclipse.ui.workbench.navigate
      
      · 載入: org.eclipse.debug.ui.launchActionSet
      
      · 編輯器表示:org.eclipse.ui.edit.text.actionSet.presentation
      
      · 搜索: org.eclipse.search.searchActionSet
      
      · Java元素建立:org.eclipse.jdt.ui.JavaElementCreationActionSet
      
      · 組: Team
      
      · CVS: CVS
      
      如果你提供的工具條ID不帶有標志ID,你的按鈕就會被添加到緊挨著這個工具條的一個新工具條之上。接著這個新工具條就可以被添加到Eclipse GUI上了。有時候你會看到使用工具條路徑"正常的(Normal)"的插件。這是舊的名稱轉換。在Eclipse 3中這樣使用的時候會建立一個叫作"Normal"的新工具條。如果你建立一個新工具條ID,你的工具條會被添加到"文件"工具條后面。
      
      請注意"文件"工具條的"新建"組標志。這是我們添加自己的按鈕的地方。由于標志ID是new.ext,完整的路徑就是:
      
      org.eclipse.ui.workbench.file/new.ext
      
      3.編寫操作委托類
      
      最后一步是編寫少量的用于實現操作的Java。這個類稱為操作委托。
      
      package invokatron.wizard;
      
      public class RunWizardAction extends Action
      implements IWorkbenchWindowActionDelegate {
      /** 操作被建立的時候調用*/
      public void init(IWorkbenchWindow window) {}
      
      /** 操作被刪除的時候調用*/
      public void dispose() {}
      
      /** 操作被執行的時候調用 */
      public void run(IAction action) {
      InvokatronWizard wizard= new InvokatronWizard();
      Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
      WizardDialog dialog= new WizardDialog(shell, wizard);
      dialog.create();
      dialog.open();
      }
      
      /** 編輯器中的對象被選中或取消選擇的時候調用*/
      public void selectionChanged(IAction action, ISelection selection) {}
      }
      
      添加菜單項
      
      你也許猜到了添加菜單項與添加工具條按鈕的過程幾乎相同。你也必須聲明一個擴展(同種類型的)、用特定的標記(相同的標記)來擴充它,并編寫操作類(相同的類)。其主要的不同點是擴展的聲明。下面是菜單項的擴展XML代碼(沒有相應的工具條按鈕):
      
      <extension id="NewInvokatronAction"
      name="New Invokatron Document Action"
      point="org.eclipse.ui.actionSets">
      <actionSet id="invokatron.actionSet"
      label="Invokatron Actions"
      visible="true">
      <action id="invokatron.wizard.RunWizardAction"
      label="New Invokatron"
      menubarPath="file/new.ext"
      icon="icons/InvokatronIcon16.gif"
      tooltip="Starts the New Invokatron Document Wizard."
      class="invokatron.wizard.RunWizardAction">
      </action>
      </actionSet>
      </extension>
      
      標簽(label)屬性包含了顯示在菜單項上的文本內容。鍵盤快捷鍵用"&"符號表示,在XML中是&。下面是一個組合了菜單項和工具條按鈕的例子:
      
      <extension id="NewInvokatronAction"
      name="New Invokatron Document Action"
      point="org.eclipse.ui.actionSets">
      <actionSet id="invokatron.actionSet"
      label="Invokatron Actions"
      visible="true">
      <action id="invokatron.wizard.RunWizardAction"
      label="New Invokatron"
      menubarPath="file/new.ext"
      toolbarPath="org.eclipse.ui.workbench.file/new.ext"
      icon="icons/invokatronPicture.gif"
      tooltip="Starts the New Invokatron Document Wizard."
      class="invokatron.wizard.RunWizardAction">
      </action>
      </actionSet>
      </extension>
      
      菜單與工具條只有稍微的不同。工具條只有一個"層次",而菜單有完整的層次。這也是用操作來聲明菜單這種方法可行的原因。菜單都列舉在<actionSet>標記之中,在<action>標記之上。它們的語法如下:
      
      <menu id="unique.ID"
      <!-- New menu at the top-level. The menubarPath
      for actions inside this menu is: Special -->
      path="Special"
      label="This is a parent menu item.">
      <!-- Optional, the menubarPath for actions after
      this separator is: Special/BelowBar -->
      <separator name="BelowBar">
      </menu>
      
      關于菜單條路徑
      
      菜單條路徑(menubar path)指出了添加菜單項的位置。我們使用分層的標識符列表來訪問這個位置。下面是經常使用的菜單條列表以及它們的路徑和公共組標志:
      
      · 文件:file
      
      o "開始" 區:fileStart
      
      o "新建"菜單內部的"附加"組標志: new/additions
      
      o "新建"區,在"新建"菜單下面:new.ext
      
      o "關閉" 區:close.ext
      
      o "保存" 區:save.ext
      
      o "打印" 區:print.ext
      
      o "打開" 區:open.ext
      
      o "導入" 區:import.ext
      
      o "附加" 區:additions
      
      o "最近的文檔" 區:mru
      
      o "結束" 區:fileEnd
      
      · 編輯: edit
      
      o "開始" 區:editStart
      
      o "撤銷" 區:undo.ext
      
      o "剪切" 區:cut.ext
      
      o "查找" 區:find.ext
      
      o "添加" 區:add.ext
      
      o "結束" 區(有時不是結束):fileEnd
      
      o "附加" 區:additions
      
      · 源: org.eclipse.jdt.ui.source.menu
      
      · 重構: org.eclipse.jdt.ui.refactoring.menu
      
      · 導航: navigate
      
      o "開始"區:navStart
      
      o "Go To"菜單中的"附加"組標志: goTo/additions
      
      o "打開"區(有四個):open.ext, open.ext2, open.ext3, and open.ext4
      
      o "顯示"區(有四個):show.ext, show.ext2, show.ext3, and show.ext4
      
      o "附加"區:additions
      
      o "結束"區:navEnd
      
      · 搜索: org.eclipse.search.menu
      
      · 項目: project
      
      o "開始"區:projStart
      
      o "打開"區:open.ext
      
      o "建立"區:build.ext
      
      o "附加"區:additions
      
      o "結束"區:projEnd
      
      · 載入: launch
      
      · 運行: org.eclipse.ui.run
      
      · "附加"組標志:additions
      
      · 窗口: window
      
      o "附加"區:additions
      
      o "結束"區:additionsend
      
      · 幫助: help
      
      o "開始"區:helpStart
      
      o "主要組"區:group.main.ext
      
      o "教程組"區:group.tutorials
      
      o "工具組"區:group.tools
      
      o "更新組"區:group.updates
      
      o "結束"區(有時候不是結束): helpEnd
      
      o "附加"區:additions
      
      o "關于組"區:group.about.ext
      
      如果你提供的菜單條ID不帶有標志ID,那么你的菜單項將出現在這個菜單條的后面。如果你建立了一個新菜單條ID,你的菜單條就被添加到"項目"和"運行"菜單之間。
      
      Eclipse開發者提示:請讓工具條和菜單條ID、標志位置保持一致性。
      
      請注意"文件"菜單的"新建"組標志。這是我們添加自己的菜單的位置。由于它的標志ID是new.ext,所以完整的路徑是:file/new.ext
      
      結果
      
      操作集合中還有其它一些特性可供使用,包括快捷鍵、狀態按鈕、浮動圖標、幫助內容和窗體工具條等等。操作集合只是記載的數十個擴展點中的一種類型的擴展。因此我們看到的只是冰山一角。但是至少它使我們理解了擴展點是如何工作的。我們看到的這些過程都是很好的。
      
      在講解向導自定義之前,我們看一下圖3所顯示的新工具條按鈕和菜單項:
      
     

      
    圖3:新的菜單項和工具條按鈕

      
      標準對話框
      
      Eclipse提供了所有的標準對話框和建立自定義對話框的簡單途徑。大多數標準對話框都是由org.eclipse.jface.dialogs.MessageDialog類提供的。這個類含有很多用于建立標準對話框的靜態方法。下面表格列舉了我們可以使用的標準對話框。
      
     

      有人可能認為使用標準對話框的時候,JOptionPane類比MessageDialog提供了更大的靈活性。但是歸根結底,在MessageDialog的構造函數和自定義對話框的幫助下,你幾乎可以實現所有的事務。MessageDialog中缺少而JOptionPane擁有的唯一的特性是在HTML中直接進行消息格式化。但是使用自定義對話框的時候是可以實現這種功能的。
      
      對話框輔助類
      
      現在我們知道了可供選擇的類型了,讓我們來建立Invokatron需要的對話框吧。有兩個地方需要對話框:
      
      · 代碼生成過程的確認信息,是否覆蓋前面的代碼。
      
      · 輸入一個值的對話框(與JOptionPane.showInputDialog()類似)。
      
      這個類中的第一個方法是用于確認代碼覆蓋的:
      
      public static boolean openOverwriteDialog(Shell parent) {
      return MessageDialog.openConfirm(parent,
      "Confirmation",
      "You are about to overwrite your class. " +
      "Are you sure you want to continue?");
      }
      
      上面的代碼非常簡單,我們僅僅建立了一個常規的確認對話框。輸入對話框有點麻煩:MessageDialog沒有輸入字段。我們只能建立一個新對話框類,可以是Dialog的子類。我們也可以建立MessageDialog的子類并重載它的createCustomArea()方法,添加輸入字段。但是我們還有更簡單的方法。
      
      我們將使用InputDialog類:
      
      public static String openInputDialog(
      Shell parent,
      String title,
      String question,
      String initialValue) {
      
      InputDialog dlg = new InputDialog(
      parent,
      title,
      question,
      initialValue,
      null); //這是一個可供選擇的有效的類
      dlg.open();
      
      if(dlg.getReturnCode()!=Window.OK) //點擊"確認"了嗎?
      return null;
      
      return dlg.getValue();
      }
      
      我們的對話框輔助類完成了。你可以在圖4中看到這些對話框。
      

      
    圖4:對話框

      
      Eclipse交響樂
      
      Eclipse與音樂類似;一旦你學會了如何使用那些可供使用的樂器,你就能編寫自己的交響樂了。在本文中我們簡短地了解了兩類工具:擴展點和對話框。
    posted on 2005-11-02 15:35 Sung 閱讀(1420) 評論(0)  編輯  收藏 所屬分類: Eclipse
    主站蜘蛛池模板: 亚欧免费一级毛片| 亚洲熟伦熟女新五十路熟妇| 精品久久久久久国产免费了| 亚洲激情视频图片| 久久久久久亚洲精品中文字幕| 日韩视频免费在线| 无码日韩精品一区二区免费暖暖| 国产亚洲精品欧洲在线观看| 亚洲不卡中文字幕| 亚洲AV无码一区二区乱孑伦AS| 免费看国产精品麻豆| 免费人成在线视频| 亚洲综合免费视频| 免费视频成人手机在线观看网址| 一区二区三区免费在线视频 | 在线v片免费观看视频| a级毛片在线免费观看| 男女超爽视频免费播放| 亚洲另类图片另类电影| 亚洲国产精品久久久久婷婷软件| 亚洲男人的天堂一区二区| 宅男666在线永久免费观看 | 亚洲人成7777影视在线观看| 久久久久亚洲AV成人无码| 亚洲色无码一区二区三区| 亚洲日本韩国在线| 亚洲av无码成人精品区| 免费一看一级毛片全播放| 日韩免费高清一级毛片在线| 成年人免费观看视频网站| a毛片基地免费全部视频| 欧洲一级毛片免费| 2021精品国产品免费观看| 久草免费手机视频| 三年片在线观看免费观看大全动漫| 中文字幕在线免费看| www一区二区www免费| 高清永久免费观看| 99免费在线视频| 男人进去女人爽免费视频国产| 免费av片在线观看网站|