如何解决如何从动作访问自定义 ToolWindow 内的组件?
我已在 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 构建方式的最实用方法吗?我不能以不同的方式访问这些组件吗?
解决方法
我找到了一种访问我的自定义 myToolWindow
的方法。这应该可以帮助很多人。
- 确保您的自定义
MyToolWindow
扩展了类SimpleToolWindowPanel
。 - 在您的自定义
myToolWindowFactory
类中,将您的自定义MyToolWindow
作为第一个参数传递给ContentFactory.createContent()
。不是在官方 IntelliJ 文档中给出的 ToolWindow 示例中所做的MyToolWindow
内部的 JPanel 之一... - 在您的
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。