You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:15:02