如何使用Intellij Platform SDK枚举编辑器实例及其所处位置
错误调用说明
你使用的windowManager.getAllProjectFrames()接口用于获取所有打开项目的顶层窗口,同一个项目内拆分的所有编辑器都归属同一个顶层窗口,所以只会返回1条结果,无法匹配你获取拆分编辑器实例的需求。
正确实现方案
IntelliJ平台中,同项目内的每一个拆分编辑器块对应EditorWindow对象,你可以通过FileEditorManager相关API获取所有编辑器实例及对应位置信息,参考代码如下:
import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.impl.EditorComposite; import com.intellij.openapi.fileEditor.impl.EditorWindow; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.WindowManager; import java.awt.Rectangle; // 可根据你的业务逻辑替换为目标项目实例 Project currentProject = WindowManager.getInstance().getCurrentFrame().getProject(); if (currentProject == null || currentProject.isDisposed()) { return; } FileEditorManager editorManager = FileEditorManager.getInstance(currentProject); // 遍历所有拆分的编辑器窗格 for (EditorWindow window : editorManager.getWindows()) { // 获取窗格位置信息 Rectangle windowBounds = window.getBounds(); // 窗格在编辑区的坐标、宽高 boolean isVerticalSplit = window.getSplitter().isVertical(); // 当前窗格所属拆分方向(垂直/水平) int windowIndex = window.getIndex(); // 窗格在同层级拆分中的序号 // 遍历当前窗格内打开的所有标签页编辑器 for (EditorComposite composite : window.getComposites()) { FileEditor editor = composite.getEditor(); // 可获取编辑器对应文件、是否激活等属性 String fileName = composite.getFile().getName(); boolean isActiveEditor = composite.isSelected(); // 此处写入你的业务逻辑 } }
核心API说明
FileEditorManager#getWindows():返回当前项目所有拆分的编辑器窗格对象,每一个拆分块对应一个返回值EditorWindow类下的相关方法可获取窗格的位置、尺寸、拆分层级等属性EditorComposite类下的相关方法可获取对应编辑器的文件、选中状态等属性
内容的提问来源于stack exchange,提问作者Dims
相关产品推荐
相关产品推荐

