工具窗口

走着路睡觉大约 5 分钟

工具窗口

工具窗口通常有自己的工具栏(工具窗口栏),在主窗口的边框上有很多工具窗口按钮,可以激活左侧,右侧,底部的工具窗口,想要查看更多工具窗口信息,请看 IntelliJ IDEA Web Helpopen in new windowTool windowopen in new window

每边包含主,次2个窗口组,同一时间每一组只有打开一个

每一个工具窗口可以显示多个标签,例如 每一个运行的项目都会显示一个Run窗口,Changes/Version Control 窗口根据项目使用的版本管理工具显示一组固定的标签

在插件中注册工具窗口的时候,主要有2个方式:

  • 使用声明式设置,一个工具窗口会一直显示,用户可以随时激活它,使用它的功能

  • 使用程序设置,通过一个特定的操作才会激活窗口,在操作完成后关闭窗口

项目级(Project-level) topic ToolWindowManagerListeneropen in new window 可以监听 工具窗口的注册和显示事件 ,参考 监听器

声明式设置

 <toolWindow id="Sample Calendar" secondary="true" 
             icon="AllIcons.General.Modified" anchor="right"
             factoryClass="org.intellij.sdk.toolWindow.MyToolWindowFactory"/>

工具窗口需要在plugin.xml注册com.intellij.toolWindow类型的扩展点 ,这个扩展点需要配置显示窗口所需要的所有数据,数据如下:

  • id: 侧边栏工具窗口按钮的名字,如果名字需要国际化,在你的插件中的国际化语言包 里 使用key: toolwindow.stripe.[id] (空格可以用_替代) 来定义
  • icon: 侧边栏工具窗口的图标(13px * 13px ,灰白色和单色,了解更多请查看 请看文档 图标和图片Tool windowopen in new window)
  • anchor: 锚,显示在哪个侧边栏(默认是左侧边栏,可选值: left ,right, bottom)
  • secondary :次要属性,指定工具窗口显示在主要组还是次要组中

factoryClass:额外属性,接口 ToolWindowFactoryopen in new window 的实现类,用户点击侧边栏工具窗口的时候会调用 ToolWindowFactory.createToolWindowContent() 方法,初始化工具窗口的UI。这样可以保证用户在不使用该工具的时候,不加载插件,不会造成内存的浪费,不会拖慢系统启动流程。

如果插件不需要在每个项目里都显示的话:

注意, 上述条件只会在项目加载的时候执行一次,根据用户的项目来显示和隐藏该插件窗口,如何注册详见 程序设置

程序设置

可以使用程序 ToolWindowManager.registerToolWindow()open in new window 来注册插件工具窗口。根据不同的需求,可以选择不同的重载方法。如果使用带组件(component)参数的方法,这个component就是第一个选项卡

选项卡

大多数工具窗口的选项卡必须要访问索引,因此,工具窗口在项目构建索引的时候是不能用的,除非实现了 ToolWindowFactory的类也实现了 DumbAwareopen in new window 接口, 用程序设置 的话, ToolWindowManager.registerToolWindow()open in new window 的canWorkInDumbMode参数必须设置为true。

工具窗口可以包含多个选项卡,ToolWindow.getContentManager()open in new window 可以管理选项卡,

如果要创建一个选项卡,操作如下:

  1. 使用 ContentManager.getFactory().createContent()open in new window 创建一个选项卡
  2. ContentManager.addContent()open in new window 方法添加选项卡,
  3. 使用 Content.setDisposer() 注册自己的回收器

关闭选项卡

插件可以控制用户是否可以在全局或按内容关闭选项卡,全局关闭是通过 把canCloseContents 传给 ToolWindowManager.registerToolWindow()open in new window 的方法实现的,或者在 plugin.xml里配置canCloseContents="true", 如果不明确指定canCloseContents="true",那么 ContentManager 管理的content调用 setClosable(true)会被忽略,
用户可以调用 Content.setCloseable(false)open in new window 来设置选项卡不能被关闭

示例

官方提供了一个开发工具窗口的示例插件open in new window

如果不知道如何运行插件可以参考文档代码示例

这个示例创建了一个日期工具窗口,如下:

上次编辑于:
贡献者: zhaojingbo
Loading...