【问题标题】:How to access components inside a custom ToolWindow from an action?如何通过操作访问自定义 ToolWindow 内的组件?
【发布时间】:2021-03-09 14:35:52
【问题描述】:

我在EditorPopupMenu 中注册了一个动作(这是右键菜单)。我在 ToolWindow(我使用 GUI Designer 插件设计的)中还有一堆组件,我想更新它们的值。

IntelliJ 论坛上有一些关于此的帖子,典型的答案似乎是建议使用 ToolWindow 的 ContentManager,并获取包含所有组件的 JPanel。例如。以下:

    Project p = e.getProject();

    ToolWindow toolWindow;
    toolWindow = ToolWindowManager.getInstance(p).getToolWindow("My ToolWindow ID");

    ContentManager contentManager = toolWindow.getContentManager();

    JPanel jp = (JPanel) contentManager.getContent(0).getComponent();

这感觉违反直觉...必须在 JPanel 中导航才能找到一堆组件。如果我决定将我的组件放在不同的容器中怎么办?突然间,我导航到我的组件的方式会崩溃。

这真的是限制自己构建 GUI 的最实用的方法吗?我不能以不同的方式访问这些组件吗?

【问题讨论】:

    标签: intellij-idea plugins intellij-plugin


    【解决方案1】:

    我找到了一种访问我的自定义 myToolWindow 的方法。这应该可以帮助很多人。

    1. 确保您的自定义 MyToolWindow 扩展类 SimpleToolWindowPanel
    2. 在您的自定义myToolWindowFactory 类中,将您的自定义MyToolWindow 作为第一个参数传递给ContentFactory.createContent()。不是 JPanel 内部的 MyToolWindow 之一,正如 IntelliJ 官方文档中给出的 ToolWindow 示例中所做的那样......
    3. MyToolWindow 构造函数中,调用方法setContent(<YourJPanelContainingYourComponents>)。

    我通过对this link 的示例 5 进行实验找到了答案:

    public JBTabbedTerminalWidget getTerminalWidget(ToolWindow window) {
        window.show(null);
        if (myTerminalWidget == null) {
            JComponent parentPanel = window.getContentManager().getContents()[0].getComponent();
            if (parentPanel instanceof SimpleToolWindowPanel) {
                SimpleToolWindowPanel panel = (SimpleToolWindowPanel) parentPanel;
                JPanel jPanel = (JPanel) panel.getComponents()[0];
                myTerminalWidget = (JBTabbedTerminalWidget) jPanel.getComponents()[0];
            } else {
                NotificationUtils.infoNotification("Wait for Freeline to initialize");
            }
        }
        return myTerminalWidget;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2022-08-17
      • 2015-05-03
      • 1970-01-01
      • 2019-10-14
      • 2018-01-15
      • 2021-11-27
      相关资源
      最近更新 更多