今天,我正在开发一个 Eclipse 插件项目,我使用标准 SWT_AWT 桥接器来插入我的 Swing 组件:
public class MyView extends ViewPart {
public static final String ID = "HelloRCP.view";
Frame frame;
public void createPartControl(Composite parent) {
Composite composite = new Composite(parent, SWT.EMBEDDED | SWT.NO_BACKGROUND);
this.frame = SWT_AWT.new_Frame(composite);
SwingUtilities.invokeLater(new Runnable() {
private MainPanel swingPanel;
public void run() {
this.swingPanel = new MainPanel();
frame.add(swingPanel);
}
});
this.setResizeListener();
}
public void setFocus() {}
private void setResizeListener() {
this.frame.addComponentListener(new frameResizeListener(this));
}
public Frame getFrame() { return this.frame; }
}
我想让“ frameResizeListener
”以某种方式触发由 Swing Runnable 实例构造的所有后续 Swing 组件(例如 JPanel)的更新,这在 ViewPart 的大小更改时,以实现某种响应式设计。不知何故,底层的 JPanel 需要了解 ViewPart 的帧大小......
我已经阅读了我相当一部分的 SO Q&As,并且只找到了“您需要在构建时传递参数”的答案。但我的问题是,一旦有问题的组件已经创建并存在,我的用例就会发生......
到目前为止,我看到的唯一解决方案似乎破坏了线程安全,方法是编写共享文件或属性,然后在完成后向 Runnable 发出信号来读取它。
请问其他人能想出更好的选择吗?
非常感谢您的支持!:) :)
问候,彼得