• jetBrains 插件开发第一课-- 在主菜单栏新增一个菜单


    环境搭建完了,接下来可以开始写代码了:

    1、新建 plugin 项目

    2、编辑 plugin.xml,修改一下里面的插件名那些信息,该文件的配置项可以看这里:plugin.xml

    其中比较关键的有一个是 <depends>com.intellij.modules.platform</depends>,如果不加这个,你点击运行的时候插件可以正常运作,但是打包之后安装却会用不了。

    <idea-plugin>
      <id>com.eleven24.helloWorld</id>
      <name>HelloWorld</name>
      <version>1.0</version>
      <vendor email="rubymay21s@gmail.com" url="http://www.cnblogs.com/eleven24">YourCompany</vendor>
    
      <description><![CDATA[
          Hello World Plugin.
        ]]></description>
    
      <change-notes><![CDATA[
          first version.
        ]]>
      </change-notes>
    
      <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
      <idea-version since-build="145.0"/>
    
      <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
           on how to target different products -->
      <!-- uncomment to enable plugin in all products
      <depends>com.intellij.modules.lang</depends>
      -->
      <depends>com.intellij.modules.platform</depends>
    
      <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
      </extensions>
    
      <actions>
        <!-- Add your actions here -->
      </actions>
    
    </idea-plugin>
    

     基本的信息如上,下面会添加一些菜单项的配置以及注册插件的配置

    3、初始化的方法

    package com.eleven24;
    
    import com.intellij.openapi.actionSystem.ActionManager;
    import com.intellij.openapi.actionSystem.DefaultActionGroup;
    import com.intellij.openapi.components.ApplicationComponent;
    import org.jetbrains.annotations.NotNull;
    
    public class HelloWorldRegistration implements ApplicationComponent {
        @NotNull
        public String getComponentName() {
            return "HelloWorldPlugin";
        }
    
        public void initComponent() {
            ActionManager am = ActionManager.getInstance();
            MenuAction menuAction = new MenuAction();
    
            am.registerAction("menuAction", menuAction);
    
            DefaultActionGroup windowsM = (DefaultActionGroup) am.getAction("WindowMenu");
    
            windowsM.addSeparator();
            windowsM.add(menuAction);
        }
    
        // Disposes system resources.
        public void disposeComponent() {
        }
    }
    

      

    4、添加应用组件的配置到 plugin.xml 中,这样 ide 才会知道我们这个插件要做什么

    <application-components>
        <component>
          <implementation-class>com.eleven24.HelloWorldRegistration</implementation-class>
        </component>
      </application-components>
    

    5、添加一个点击菜单之后的处理方法,需要继承 AnAction 类

    package com.eleven24;
    
    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    import com.intellij.openapi.ui.Messages;
    
    public class MenuAction extends AnAction {
        @Override
        public void actionPerformed(AnActionEvent anActionEvent) {
            Messages.showInfoMessage("Hello World!", "First Plugin");
        }
    }

    5、添加菜单,这个的话在 plugin.xml 中配置,同时也要指定该菜单点击之后对应的处理类(上面的menuAction)

    我们添加一个组名叫 "HelloWorld" 的菜单组,添加到主菜单栏末尾,然后在其下添加一个名为 "menu action" 的菜单。具体配置如下:

     <actions>
        <!-- Add your actions here -->
        <group id="HelloWorld" text="_HelloWorld">
          <add-to-group group-id="MainMenu" anchor="last" />
        </group>
    
        <action class="com.eleven24.MenuAction" id="menuAction" text="menu action">
          <add-to-group group-id="HelloWorld" anchor="first" />
        </action>
      </actions>
    

      

    6、到此为止,我们已经完成了菜单的添加,点击右上角的运行按钮可以查看效果,运行的时候会再打开一个 ide,会有点慢。

    7、效果图

    8、下面是最终的配置文件

    <idea-plugin>
      <id>com.eleven24.helloWorld</id>
      <name>HelloWorld</name>
      <version>1.0</version>
      <vendor email="rubymay21s@gmail.com" url="http://www.cnblogs.com/eleven24">YourCompany</vendor>
    
      <description><![CDATA[
          Hello World Plugin.
        ]]></description>
    
      <change-notes><![CDATA[
          first version.
        ]]>
      </change-notes>
    
      <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
      <idea-version since-build="145.0"/>
    
      <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
           on how to target different products -->
      <!-- uncomment to enable plugin in all products
      <depends>com.intellij.modules.lang</depends>
      -->
      <depends>com.intellij.modules.platform</depends>
    
      <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
      </extensions>
    
      <actions>
        <!-- Add your actions here -->
        <group id="HelloWorld" text="_HelloWorld" description="menu group">
          <add-to-group group-id="MainMenu" anchor="last" />
          <action class="com.eleven24.MenuAction" id="helloWorld.menuAction" text="menu action" />
        </group>
      </actions>
    
      <application-components>
        <component>
          <implementation-class>com.eleven24.HelloWorldRegistration</implementation-class>
        </component>
      </application-components>
    
    </idea-plugin>
    

      

    好了,就这么多了。

  • 相关阅读:
    全站HTTPS底层实现原理
    python十个实战项目
    CP30,DBCP数据源配置
    FileUtils
    我的HttpClients工具
    Hibernate如何一个类映射两个表
    SSH2中实例化不了Action的一个原因
    二进制实现权限的分配管理
    myclips常用快捷键
    Hibernate 的*.hbm.xml文件的填写技巧
  • 原文地址:https://www.cnblogs.com/eleven24/p/8284880.html
Copyright © 2020-2023  润新知