栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

检索和设置IntelliJ IDEA插件开发的拆分窗口设置

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

检索和设置IntelliJ IDEA插件开发的拆分窗口设置

这是未经测试的代码,但是由于它紧密地重新组合了EditorsSplitters

writeExternal
writePanel
函数内部的过程,因此我相信这是可行的。

提出了两种方法:

  • writeExternal
    ->的访问输出应该是更稳定的API,并且可以更轻松地访问文件信息
  • 访问splitter的组件->以这种方式

    writeExternal
    创建它的信息;可悲的是,至少有一个保护场没有涉及吸气剂(
    window.myPanel
    内部
    findWindowWith

    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    import com.intellij.openapi.fileEditor.FileEditorManager;
    import com.intellij.openapi.fileEditor.impl.EditorsSplitters;
    import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
    import com.intellij.openapi.project.Project;
    import com.intellij.openapi.ui.Splitter;
    import org.jdom.Element;

    import javax.swing.;
    import java.awt.
    ;
    import java.util.ArrayList;

    public class SplitterAction extends AnAction {

    public SplitterAction() {    super("Splitter _Action");}private static class Info {}private static class SplitInfo extends Info {    public Info    first;    public Info    second;    public boolean vertical;    public float   proportions;}private static class FileInfo extends Info {    public String[] fileNames;}@Overridepublic void actionPerformed(AnActionEvent anActionEvent) {    final Project project = anActionEvent.getProject();    final FileEditorManagerImpl fileEditorManager = (FileEditorManagerImpl) FileEditorManager.getInstance(project);    EditorsSplitters splitters = fileEditorManager.getSplitters();    // com.intellij.openapi.fileEditor.impl.EditorsSplitters.writeExternal() and    // com.intellij.openapi.fileEditor.impl.EditorsSplitters#writePanel inspired this    final Component component = splitters.getComponent(0);    final SplitInfo infos = splitterVisitor(component);    // or you could use this    Element root = new Element("root");    splitters.writeExternal(root);    elementVisitor(root);    // to restore from writeExternal the following should suffice    splitters.readExternal(root);    splitters.openFiles();}private Info elementVisitor(Element root) {    final Element splitter = root.getChild("splitter");    if (splitter != null) {        // see com.intellij.openapi.fileEditor.impl.EditorsSplitters#writePanel        final SplitInfo splitInfo = new SplitInfo();        // "vertical" or "horizontal"        splitInfo.vertical = "vertical".equals(splitter.getAttributevalue("split-orientation"));        splitInfo.proportions = Float.parseFloat(splitter.getAttributevalue("split-proportion"));        Element first = splitter.getChild("split-first");        if (first != null) { splitInfo.first = elementVisitor(first);        }        Element second = splitter.getChild("split-second");        if (second != null) { splitInfo.second = elementVisitor(second);        }        return splitInfo;    }    final Element leaf = root.getChild("leaf");    if (leaf != null) {        final ArrayList<String> fileNames = new ArrayList<String>();        for (Element file : leaf.getChildren("file")) { final String fileName = file.getAttributevalue("leaf-file-name"); fileNames.add(fileName); // further attributes see com.intellij.openapi.fileEditor.impl.EditorsSplitters#writeComposite        }        final FileInfo fileInfo = new FileInfo();        fileInfo.fileNames = fileNames.toArray(new String[fileNames.size()]);        return fileInfo;    }    return null;}private SplitInfo splitterVisitor(Component component) {    if (component instanceof JPanel && ((JPanel) component).getComponentCount() > 0) {        final Component child = ((JPanel) component).getComponent(0);        if (child instanceof Splitter) { final Splitter splitter = (Splitter) child; final SplitInfo splitInfos = new SplitInfo(); splitInfos.vertical = splitter.isVertical(); splitInfos.proportions = splitter.getProportion(); splitInfos.first = splitterVisitor(splitter.getFirstComponent()); splitInfos.second = splitterVisitor(splitter.getSecondComponent()); return splitInfos;        }        // TODO: retrieve file information    }    return null;}

    }



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号