IntelliJ插件开发教程之新建Action

简介: 认识Action在IDE编辑器中可以通过右键打开选项,如下图所示,这里的动作便是Action,同时在顶部的ToolBar也会有相应的Action,如下图所示。可能大家对我这个IDE的UI有点陌生,其实这是2022.3版本的IDEA开启了New UI,NEW UI还是内测中,需要手动开启,设置位置在:Settings->appearance&behavior -> New UI

认识Action

在IDE编辑器中可以通过右键打开选项,如下图所示,这里的动作便是Action,同时在顶部的ToolBar也会有相应的Action,如下图所示。可能大家对我这个IDE的UI有点陌生,其实这是2022.3版本的IDEA开启了New UI,NEW UI还是内测中,需要手动开启,设置位置在:Settings->appearance&behavior -> New UI。

新建Action

本文示例代码可以点击文末阅读原文获取,拿MessageDialogAction进行讲解,这个Action做的事情就是通过Dialog展示当前选择的文本。所有Action都要继承自AnAction并实现actionPerformed方法,Action执行时便会回调这个方法。

同时需要在plugin.xml文件注册这个Action之后,这个Action才能生效。所有Action都在actions标签中进行注册,首先通过action标签注册,通过group标签可以将Action进行组合,add-to-group表示添加到某个组里面,可以添加到编辑器右键选项(EditorPopupMenu)和菜单栏(ToolsMenu)。

<actions>
        <action id="messageDialogAction"
                text="MessageDialog测试"
                class="com.example.ideaplugindemo.action.MessageDialogAction"/>
        <group id="notificationTest" popup="true"
               text="通知测试">
            <add-to-group group-id="EditorPopupMenu" anchor="after" relative-to-action="$Paste"/>
            <add-to-group group-id="ToolsMenu" anchor="first"/>
            <reference ref="messageDialogAction"/>
        </group>
</actions>

能干什么

actionPerformed方法传入AnActionEvent参数,通过这个参数我们可以获取到很多信息,比如通过DataContext获取到编辑器对象,通过编辑器对象就可以做很多事情,如下是通过CaretModel获取到当前选择的文本。

Editor editor = CommonDataKeys.EDITOR.getData(e.getDataContext());
String selectedText = Optional.ofNullable(editor)
    .map(Editor::getCaretModel)
    .map(CaretModel::getPrimaryCaret)
    .map(Caret::getSelectedText)
    .orElse("")
int result = Messages.showYesNoCancelDialog(e.getProject(), "Yes or no dialog 测试 测试,你选择的是" + selectedText, "Plugin Demo",
    "Yes", "No", "Cancel", Messages.getQuestionIcon());

 

相关文章
|
搜索推荐 IDE 开发工具
IDEA自定义右键菜单
IDEA自定义右键菜单
2885 1
|
人工智能 监控 Swift
魔搭社区LLM模型部署实践 —— 以ChatGLM3为例
本文将以ChatGLM3-6B为例,介绍在魔搭社区如何部署LLM
|
测试技术
7、软件产品交付过程——所有表集合
7、软件产品交付过程——所有表集合
299 0
|
Java Apache
解决gradle下载慢的问题
解决gradle下载慢的问题
9195 0
|
Windows
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
|
前端开发 网络协议 Dubbo
超详细Netty入门,看这篇就够了!
本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。
92549 32
超详细Netty入门,看这篇就够了!
|
8月前
|
关系型数据库 Linux 数据库
PostgreSQL 入门指南:安装、配置与基本命令
本文从零开始,详细介绍如何在 Windows、Linux 和 macOS 上安装和配置 PostgreSQL,涵盖30+个实操代码示例。内容包括安装步骤、配置远程访问和用户权限、基础数据库操作命令(如创建表、插入和查询数据),以及常见问题的解决方案。通过学习,你将掌握 PostgreSQL 的基本使用方法,并为后续深入学习打下坚实基础。
8896 1
|
Kubernetes Cloud Native Java
探索Quarkus:Java的新一代高性能轻量级框架
探索Quarkus:Java的新一代高性能轻量级框架
5130 3
|
人工智能 Java
通过okhttp调用SSE流式接口,并将消息返回给客户端
通过okhttp调用SSE流式接口,并将消息返回给客户端
|
Java
IDEA插件开发(三)
IDEA插件开发
770 0