關於Eclipse插件開發(一)

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透視圖"再打開就應該可以出現上圖兩個視圖都存在的效果.

相關文章
相關標籤/搜索