工具窗口
工具窗口
工具窗口通常有自己的工具栏(工具窗口栏),在主窗口的边框上有很多工具窗口按钮,可以激活左侧,右侧,底部的工具窗口,想要查看更多工具窗口信息,请看 IntelliJ IDEA Web Help 和 Tool window
每边包含主,次2个窗口组,同一时间每一组只有打开一个
每一个工具窗口可以显示多个标签,例如 每一个运行的项目都会显示一个Run窗口,Changes/Version Control 窗口根据项目使用的版本管理工具显示一组固定的标签
在插件中注册工具窗口的时候,主要有2个方式:
项目级(Project-level) topic ToolWindowManagerListener 可以监听 工具窗口的注册和显示事件 ,参考 监听器
声明式设置
<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 window)
- anchor: 锚,显示在哪个侧边栏(默认是左侧边栏,可选值: left ,right, bottom)
- secondary :次要属性,指定工具窗口显示在主要组还是次要组中
factoryClass:额外属性,接口 ToolWindowFactory 的实现类,用户点击侧边栏工具窗口的时候会调用 ToolWindowFactory.createToolWindowContent() 方法,初始化工具窗口的UI。这样可以保证用户在不使用该工具的时候,不加载插件,不会造成内存的浪费,不会拖慢系统启动流程。
如果插件不需要在每个项目里都显示的话:
注意, 上述条件只会在项目加载的时候执行一次,根据用户的项目来显示和隐藏该插件窗口,如何注册详见 程序设置
程序设置
可以使用程序 ToolWindowManager.registerToolWindow() 来注册插件工具窗口。根据不同的需求,可以选择不同的重载方法。如果使用带组件(component)参数的方法,这个component就是第一个选项卡
选项卡
大多数工具窗口的选项卡必须要访问索引,因此,工具窗口在项目构建索引的时候是不能用的,除非实现了 ToolWindowFactory的类也实现了 DumbAware 接口, 用程序设置 的话, ToolWindowManager.registerToolWindow() 的canWorkInDumbMode参数必须设置为true。
工具窗口可以包含多个选项卡,ToolWindow.getContentManager() 可以管理选项卡,
如果要创建一个选项卡,操作如下:
- 使用 ContentManager.getFactory().createContent() 创建一个选项卡
- ContentManager.addContent() 方法添加选项卡,
- 使用 Content.setDisposer() 注册自己的回收器
关闭选项卡
插件可以控制用户是否可以在全局或按内容关闭选项卡,全局关闭是通过 把canCloseContents 传给 ToolWindowManager.registerToolWindow() 的方法实现的,或者在 plugin.xml里配置canCloseContents="true", 如果不明确指定canCloseContents="true",那么 ContentManager 管理的content调用 setClosable(true)会被忽略,
用户可以调用 Content.setCloseable(false) 来设置选项卡不能被关闭
示例
官方提供了一个开发工具窗口的示例插件
如果不知道如何运行插件可以参考文档代码示例
这个示例创建了一个日期工具窗口,如下: