在 Eclipse 插件的 ViewPart 内更改 Swing JPanel 的大小尽管 SwingUtilities.invokeLater(Runnable())

问题描述

今天,我正在处理一个 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 的 Frame 大小...

我已经阅读了我对 SO Q&A 的公平分享,并且只找到了“您需要在构建时传递参数”的答案。但我的问题是,一旦有问题的组件已经创建并存在,我的用例就会发生......

到目前为止,我看到的唯一解决方案似乎破坏了线程安全,即写入共享文件属性,然后在完成后向 Runnable 发出信号以读取它。

请问其他人能想到更好的选择吗?

非常感谢您的支持! :) :)

问候, 彼得

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)