plugin.xml是插件和Eclipse內核的接口,Eclipse就像一所大宅子.它的外牆(plugin.xml)有不少門(擴展點),java
要熟練進入這座大宅子,就得先搞清楚它有那些門(擴展點).eclipse
插件的擴展點很是多,可是不少擴展點都用不到,只須要熟悉一些主要的擴展點就能夠了.ide
在新版本的Eclipse中創建一個plugin-project項目的時候(同時創建的過程當中不選用Eclipse中提供的模板的話),是不生成plugin.xml文件的(若是選擇了Eclipse中提供的模板是必定會生成plugin.xml文件的),在Eclipse3.0以前的版本貌似都會創建的時候就自動生成.工具
因此在Eclipse3.0以後在創建項目的過程當中不選擇模板,又想生成plugin.xml文件的方法:佈局
先雙擊"MANIFEST.MF"而後在"Extensions"選項卡上點擊"Add"這時候就會生成plugin.xml文件了.ui
加入透視圖(perspectives)spa
開發一個插件最經常使用的就是新增一個屬於本插件專有的透視圖.而後在此透視圖基礎上來展開一些功能,本書 也採用這種方式.插件
打開plugin.xml文件以後加入下面的代碼code
1 <?xml version="1.0" encoding="UTF-8"?> 2 <?eclipse version="3.4"?> 3 <plugin> 4 <extension point="org.eclipse.ui.perspectives"> 6 <perspective 7 name="myplugin 透視圖" 8 icon="icons/selectall.gif" 9 class="cn.com.kxh.myplugin.SamplePerspective" 10 id="cn.com.kxh.myplugin.SamplePerspective"> 11 </perspective> 12 </extension> 13 </plugin>
注意這個地方別有單詞寫錯.不然你懂得.orm
代碼說明:
org.eclipse.ui.perspectives:透視圖的擴展點.
name:透視圖的名稱
icon:透視圖的圖標
class:透視圖所對應的類(尚未編寫,下一步將完成此類)
id:透視圖的惟一標識符,取和class相同的名稱,省得之後擴展點太多記不住.
也能夠用GUI界面來建立擴展點.
而後再去創建一個透視圖類
前面在plugin.xml中設置了透視圖對應的SamplePerspective類,這裏就在包cn.com.kxh.myplugin下建立此類,透視圖類必須實現IPerspectiveFactory接口.此接口只有一個須要實現的方法createInitialLayout,先讓他空實現.以下所示:
public class SamplePerspective implements IPerspectiveFactory{ @Override public void createInitialLayout(IPageLayout arg0) { // TODO Auto-generated method stub } }
這樣再次啓動Eclipse以後就會在Perspective視圖中發現這個定義的"myplugin透視圖"
在透視圖(perspective)中加入視圖(views)
修改plugin.xml文件,設置視圖的擴展點.
打開plugin.xml文件的編輯框,將以下代碼塊插入到最後一行的</plugin>以前:
<extension point="org.eclipse.ui.views"> <view name="視圖1" icon="icons/prev.gif" category="com.glkxh.myplugin.view" class="cn.com.kxh.myplugin.View1" id="cn.com.kxh.myplugin.View1"> </view> <view name="視圖2" icon="icons/project.gif" category="com.glkxh.myplugin.view" class="cn.com.kxh.myplugin.View2" id="cn.com.kxh.myplugin.View2"> </view> </extension>
上述代碼說明:
org.eclipse.ui.views是視圖的擴展點.
<category>項設置的分組名以及id標識,它的效果體如今"顯示視圖"框中,(Eclipse中找到"Window---->Show View----->other"這個命令中打開.)如今尚未建立視圖類,暫時還看不到效果.id標識要保證它在Eclipse的全部插件中惟一.假設和Ant插件的id相同.則原Ant插件的id相同,則原Ant組就會被myplugin視圖抹掉.若是刪除<category>不設置,這Eclipse中會自動新增一個"其餘"組.並將兩個視圖加入.
<view>的category是標識本視圖屬於哪一個組,與上面的<category>項的id值相同.
<view>的class是視圖所對應的類(如今暫時尚未編寫)
<view>的id是視圖標識,建議設置成和class同樣的名稱.
建立一個視圖類.
View1.java
1 public class View1 extends ViewPart { 2 private List list; // 將列表寫成類的實例變量,以擴大它的可訪問範圍 3 //注意這個List並非java.util包下的.而是org.eclipse.swt.widgets.List;包下的. 4 public void createPartControl(Composite parent) { 5 IWorkbenchHelpSystem help = PlatformUI.getWorkbench().getHelpSystem(); 6 help.setHelp(parent, "cn.com.kxh.myplugin.buttonHelpId"); 7 Composite topComp = new Composite(parent, SWT.NONE); 8 topComp.setLayout(new FillLayout()); 9 list = new List(topComp, SWT.BORDER); 10 list.add("中國"); 11 list.add("美國"); 12 list.add("法國"); 13 } 14 @Override 15 public void setFocus() {} 16 }
View2.java
1 public class View2 extends ViewPart { 2 public void createPartControl(Composite parent) { 3 Composite topComp = new Composite(parent,SWT.NONE); 4 topComp.setLayout(new FillLayout()); 5 Text text = new Text(topComp,SWT.BORDER); 6 text.setText("我是Text框"); 7 } 8 public void setFocus() {} 9 }
以前的SamplePerspective.java
1 public class SamplePerspective implements IPerspectiveFactory { 2 // 參數IPageLayout是用於透視圖的佈局管理器 3 public void createInitialLayout(IPageLayout layout) { 4 // 獲得本透視圖的編輯空間標識 5 String editorArea = layout.getEditorArea(); 6 // 在透視圖左部建立一個空間,並將「視圖1」放入其中。 7 // "left"是此空間的標識;IPageLayout.LEFT指出此空間在透視圖佈局中的位置靠左; 8 // 0.2f 指此空間佔用透視圖20%的寬度;editorArea 指使用透視圖的編輯空間 9 IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.2f, editorArea); 10 left.addView("cn.com.kxh.myplugin.View1"); // 參數爲plugin.xml中「視圖1」的id標識 11 // 將「視圖2」加入到透視圖的底部 12 IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.8f, editorArea); 13 bottom.addView(View2.class.getName());// 因爲咱們把視圖的id取成和類全名同樣,因此也能夠用這種寫法 14 // 將之前定義的actionset(主菜單、工具欄按鈕)加入到本透視圖。這要在plugin.xml文 15 // 件的action設置中將visible="false"纔看得出效果,這時打開其餘透視圖,action設置的 16 // 主菜單、工具欄按鈕將不會出如今界面上,只有打開本透視圖纔會出現。 17 layout.addActionSet("myplugin.actionSet");// 參數爲actionSet在plugin.xml中的id標識 18 } 19 }
plugin.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <?eclipse version="3.4"?> 3 <plugin> 4 <extension point="org.eclipse.ui.perspectives"> 5 <perspective 6 name="myplugin 透視圖" 7 icon="icons/selectall.gif" 8 class="cn.com.kxh.myplugin.SamplePerspective" 9 id="cn.com.kxh.myplugin.SamplePerspective"> 10 </perspective> 11 </extension> 12 <extension point="org.eclipse.ui.views"> 13 <view 14 name="視圖1" 15 icon="icons/prev.gif" 16 category="com.glkxh.myplugin.view" 17 class="cn.com.kxh.myplugin.View1" 18 id="cn.com.kxh.myplugin.View1"> 19 </view> 20 <view 21 name="視圖2" 22 icon="icons/project.gif" 23 category="com.glkxh.myplugin.view" 24 class="cn.com.kxh.myplugin.View2" 25 id="cn.com.kxh.myplugin.View2"> 26 </view> 27 </extension> 28 </plugin>
寫完上述文件內容就會在Perspective中有了相應的View視圖.
運行以後
這個地方說一下,當時我運行完以後左側的視圖1並無出現,只出現了下部的視圖2.其實這個時候只要在關閉"myplugin透視圖"再打開就應該可以出現上圖兩個視圖都存在的效果.