前言

最近工作上在做IDEA插件开发的东西,所以需要深入学习。在网上看到一个比较好的例子,实现一个笔记插件,故实现后发布这篇博客,分享给同样在学习的你。

(mdNote插件下载地址:https://mangomei.lanzouy.com/iWLPb00tn8vc)

更多细节及实现欢迎下载源码学习:https://gitee.com/mgang/idea-demo/tree/master/md-note

其实也可以按第一个IDEA插件hello ide开发里提到的发布插件的方式,发布到官网插件仓库。

环境信息

(小插曲:之前下载的是最新版的idea ce版2021.3.1,出现插件中文4横线中文乱码问题。所以换成2019.3.5版本,没有上述中文乱码问题。)

主要功能列表及知识点

  1. 提供一个视窗,展示要保存的笔记数据(视窗开发)
  2. 选中文件内的文本右键能加入到笔记数据(右键action及弹窗)
  3. 点击保存md按钮后,生成对应的md笔记(文件选择器及模板渲染)

实现步骤详细

建立视窗并注册

通过视窗工厂创建视窗内容,其中MdNoteUI是通过GUI Form的方式创建(布局和逻辑分离)

/*** md note 视窗提供者*/
public class MdNoteWindowFactory implements ToolWindowFactory {@Overridepublic void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {// 从toolWindow获取contentManagerContentManager contentManager = toolWindow.getContentManager();// 从contentManager获取contentFactoryContentFactory contentFactory = contentManager.getFactory();// contentFactory创建内容MdNoteUI mdNoteUI = new MdNoteUI(project);Content content = contentFactory.createContent(mdNoteUI.view(),"main",true);// 将内容通过contentManager注册到视窗contentManager.addContent(content);}
}

并注册到扩展点上。

<extensions defaultExtensionNs="com.intellij"><!-- Add your extensions here --><toolWindow factoryClass="com.mango.idea.md.note.window.MdNoteWindowFactory" id="MdNote" anchor="right"></toolWindow>
</extensions>

视窗内容设计

按如下布局设计内容

选择文本并右击保持到笔记

新建action注册到右键菜单EditorPopupMenu,取名为add md note

<action id="mp-add-note-note" class="com.mango.idea.md.note.action.AddMdNoteAction"text="add md note" description="add md note"><add-to-group group-id="EditorPopupMenu" anchor="first"/><keyboard-shortcut keymap="$default" first-keystroke="shift ctrl meta M"/>
</action>

在选择文本后点击add md note,弹出标题和描述对话框。

/*** 添加md note action*/
public class AddMdNoteAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent e) {// 获取鼠标选中的文本String selectedText = e.getRequiredData(CommonDataKeys.EDITOR).getSelectionModel().getSelectedText();// 获取当前右键的文件名VirtualFile virtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE);String fileName =  virtualFile.getName();// 显示弹框,填写标题和描述AddNoteDialog addNoteDialog = new AddNoteDialog(selectedText,fileName);addNoteDialog.showAndGet();}
}

确定后,视窗就能正常显示出笔记。

点击保存到md保存笔记

输入笔记标题,并点击保存到md

最后预览一下生成的笔记。(使用freemarker做模板生成)

总结

  • 学习到如何开发设计一个视窗
  • 学习到如何获取鼠标选中的文本
  • 学习到如何使用GUI form的方式做布局
  • 学习到JTable做数据展示及清除
  • 学习到如何使用FileChooser做文件路径选择

更多细节及实现欢迎下载源码学习:https://gitee.com/mgang/idea-demo/tree/master/md-note

千呼万唤始出来的IDEA笔记插件mdNote相关推荐

  1. Zotero笔记插件zotero-better-notes的基本使用方法与下载

    Zotero笔记插件zotero-better-notes的基本使用方法与下载 zotero-better-notes能干什么 主笔记管理其他笔记 主笔记的创建 其他笔记加入主笔记 其他文献笔记写作模 ...

  2. 写笔记插件_Java程序员笔记(知识)管理的一点经验

    记笔记这件事,也许在很多人看来,再普通.简单不过了--从小老师就教育我们要这么做.不同的人有不同的方式,我们最终的目的,还是希望不要停留在只是记录这一层面上,而是将它们转变为我们的知识.作为一个程序员 ...

  3. 写笔记插件_如何构建自己的笔记知识体系?

    文章首发于微信公众号:[坂本先生],有兴趣的可以来我的公众号,分享更多的编程知识,生活趣事. 如何构建自己的知识体系?​mp.weixin.qq.com 一.开篇 好久没有写原创文章了,或许是因为最近 ...

  4. 写笔记插件_梁宝川:这11条anki插件的使用常识分享给你

    每日写一篇文章的第2年195天 anki考研找梁宝川 在我们编辑anki笔记的过程当中,插件我担任着一个非常重要的角色. 因为插件可以帮我们将笔记形式变得更加丰富. 并且,也可以我们更加方便的操作an ...

  5. 写笔记插件_Obsidian 插件推荐

    Obsidian 插件 插件(Plug-in),是一种电脑程序,透过和应用程序(例如网页浏览器,电子邮件客户端)的互动,用来替应用程序增加一些所需要的特定的功能.最常见的有游戏.网页浏览器的插件和媒体 ...

  6. 写笔记插件_我的笔记系统

    一个好的笔记系统,应该把你所学习到的任何资料串联起来,形成一个知识系统,在你需要他们的时候,可以很容易找到他们,然后形成自己新的知识. 在<用OneNote管理你的知识>这篇文章中介绍了我 ...

  7. vim 离线安装_VIM学习笔记 插件列表(Plugin)

    由于zhihu的垃圾编辑器不支持表格,请查看以下完整格式: http://yyq123.github.io/learn-vim/learn-vim-plugin.html 说明: 本列表完全基于作者的 ...

  8. 为知笔记插件朗读器关不了怎么办?/怎么才能关闭为知笔记的朗读器插件

    电脑端点击阅读笔记后,怎么样才能中途暂停朗读呢? 答:屏幕右下角托盘区域有图标,可以设置的.

  9. 浏览器安装为知笔记插件(chrome浏览器)

    1.下载并安装驱动    wiz.cn/zh-cn/downloads-webclipper.html 2.我选择的谷歌浏览器,这里选择手动安装 3. 下载会得到一个crx文件.注意这里按照官方文档去 ...

  10. firefox的一款记笔记的插件

    网文快捕被我抛弃之后,一直很享受与firefox下的scrapbook带给我的迅速记录网页浏览记录的畅快中,但是它真正作为一款知识管理软件还是在功能的丰富性上难以满足我的要求,特别是在浏览网页时想记点 ...

最新文章

  1. shell截取小数等
  2. 对部门的建议和期待怎么写_教学反思到底该怎么写?这些要点一个都不能少(建议收藏)...
  3. 也谈淘点点60s短信订单的架构设计
  4. hdu 2058 枚举区间和个数
  5. iphone 软键盘
  6. 黑马程序员_网络编程总结
  7. linux操作命令 mongo_Linux安装mongodb总结(仅学习)
  8. 创意设计师变圆周率为彩色艺术品
  9. 数据结构树4-二叉搜索树2
  10. 必须放在特定的文件夹中才能运行的Python程序
  11. mysql——逗号分割字段情况
  12. 让Safari更好用,10款实用Safari扩展推荐
  13. 【Java EE】Day10 JavaScript高级、DOM、BOM、事件
  14. 小米cc9出厂线刷包_小米CC9手机忘记密码一键刷机解锁 | 线刷宝刷机工具刷机包下载...
  15. 山东大学软件学院操作系统实验的准备
  16. UBUNTU内核升级后,如何更新 kernel headers
  17. 软件工程阶段性总结(三)——软件设计和编码
  18. keras yolo3 使用 CIOU Loss
  19. 字符串中Emoji表情处理
  20. 周易六十四卦——睽卦

热门文章

  1. Jetson TX2之ALSA学习
  2. Excel图表数跨行选择数据
  3. 寄存器以及偏移地址计算方法
  4. lagrange量中的u和v的来历
  5. C# VB .NET生成条形码,支持多种格式类型
  6. border的属性及写法大全:实线、点线、虚线、双线、混合用法
  7. 51单片机基本工作引脚
  8. HDMI level shifter、接口保护、USB TYPC转HDMI芯片
  9. 数据库实验|姓名,课程的随机生成
  10. 用什么系统搭建nas服务器,自己家里搭建NAS服务器有什么好方案