• 关于Eclipse插件开发(一)


    plugin.xml是插件和Eclipse内核的接口,Eclipse就像一所大宅子.它的外墙(plugin.xml)有很多门(扩展点),

    要熟练进入这座大宅子,就得先搞清楚它有那些门(扩展点).

    插件的扩展点非常多,但是很多扩展点都用不到,只需要熟悉一些主要的扩展点就可以了.

    在新版本的Eclipse中建立一个plugin-project项目的时候(同时建立的过程中不选用Eclipse中提供的模板的话),是不生成plugin.xml文件的(如果选择了Eclipse中提供的模板是一定会生成plugin.xml文件的),在Eclipse3.0之前的版本貌似都会建立的时候就自动生成.

    所以在Eclipse3.0之后在建立项目的过程中不选择模板,又想生成plugin.xml文件的方法:

    先双击"MANIFEST.MF"然后在"Extensions"选项卡上点击"Add"这时候就会生成plugin.xml文件了.

    加入透视图(perspectives)

    开发一个插件最常用的就是新增一个属于本插件专有的透视图.然后在此透视图基础上来展开一些功能,本书 也采用这种方式.

    打开plugin.xml文件之后加入下面的代码

     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>

    注意这个地方别有单词写错.否则你懂得.

    代码说明:

    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透视图"再打开就应该能够出现上图两个视图都存在的效果.

  • 相关阅读:
    第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列
    第14章 启动文件详解—零死角玩转STM32-F429系列
    第13章 GPIO-位带操作—零死角玩转STM32-F429系列
    第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列
    使用Vmware过程中,突然网络连接不上问题
    Yaf自定义autoload以实现Model文件和Controller文件命名区分
    Yaf学习过程中遇到的问题小记
    网页出现横向滚动条的原因可能是使用bootstrap不当引起
    微信小程序开发(一)
    nginx 启动报错找不到nginx.pid文件
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4172290.html
Copyright © 2020-2023  润新知