Intellij 插件开发:在不同项目中打开时,toolWindow 扩展为空白 windows

Intellij Plugin Development: toolWindow extension is blank when opened in different project windows

当我在不同的 intellij windows 中打开多个 (3-4) 项目时,我的 JSON 插件工具 window 显示为空白。 这是我的 plugin.xml

<idea-plugin>
  <id>com.xxxxx.json.Editor</id>
  <name>JSON Editor</name>
  <version>1.5</version>
  <vendor email="xxxxxxxxxx" url="xxxxxxx">xxxxxx</vendor>

  <description><![CDATA[
      JetBrains IntelliJ IDE plugin for easy viewing and editing of currently opened JSON file in IDE using Tree Structure.
    ]]></description>

  <change-notes><![CDATA[
      Feature: Indentation changes - adding space after ':' char.
    ]]>
  </change-notes>

  <idea-version since-build="192.6"/>
  <extensions defaultExtensionNs="com.intellij">
    <toolWindow id="JSON Editor" anchor="right" factoryClass="JsonEditor" />
  </extensions>

  <actions>
  </actions>

</idea-plugin>

这是包含插件内容(按钮和树视图)的屏幕截图 JSON 编辑器工具 window。

这是同一工具窗口内容完全空白的屏幕截图(如果在不同 windows 中打开多个 (3-4) 项目,则会发生这种情况。)

这是 createToolWindowContent 方法的代码 -

public class JsonEditor implements ToolWindowFactory {

    private JPanel mainContent;
    ....
    ....

    @Override
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
        this.project = project;
        ContentFactory contentFactory = 
        ContentFactory.SERVICE.getInstance();
        Content content = contentFactory.createContent(mainContent, "", false);
        toolWindow.getContentManager().addContent(content);
    }
}

如何解决这个问题?我也可以让插件扩展实例的不同状态以不同的方式打开吗?

每次调用 createToolWindowContent 方法时,您都需要创建不同的 mainContent 实例,因为 AWT 小部件只能有一个父级。

此方法根据 IDE window 调用,因此 window 将 "win"。

所以不要写 mainContentcreateMainContentInstance()。然后,您可以通过使用当前 window 的项目对象来访问全局所需的详细信息,这在 windows.

之间是不同的