Java 当主组合最大化/最小化时,JFace ComboViewer会调整自身大小

Java 当主组合最大化/最小化时,JFace ComboViewer会调整自身大小,java,combobox,swt,jface,composite,Java,Combobox,Swt,Jface,Composite,在JFace向导中,我在该组合中有一个主组合和一个ComboViewer。第一次打开窗口时,我可以看到ComboViewer在其父组合中具有适当的大小,然后当我调整JFace向导的大小(通过单击窗口上的最大化选项)时,ComboViewer会根据窗口的大小进行调整,然后关闭窗口,而不会将其最小化。在这之前一切都很好。 但是,当我重新打开向导时,我看到ComboViewer将自身调整为一个几乎看不见的非常小的小部件,这种奇怪的行为仅通过此工作流发生- 1) 打开向导。 2) 最大化窗口并关闭向导。

在JFace向导中,我在该组合中有一个主组合和一个ComboViewer。第一次打开窗口时,我可以看到ComboViewer在其父组合中具有适当的大小,然后当我调整JFace向导的大小(通过单击窗口上的最大化选项)时,ComboViewer会根据窗口的大小进行调整,然后关闭窗口,而不会将其最小化。在这之前一切都很好。 但是,当我重新打开向导时,我看到ComboViewer将自身调整为一个几乎看不见的非常小的小部件,这种奇怪的行为仅通过此工作流发生-

1) 打开向导。 2) 最大化窗口并关闭向导。 3) 重新打开向导,您会看到ComboViewer会调整自身大小并
显示为一个非常小的小部件。 4) 再次最大化/最小化主窗口,然后ComboViewer绘制自身 达到最初的预期尺寸

[请注意-这种奇怪的行为只有在SWT 3.7中才会发生,我尝试用SWT 3.5在Eclipse中重置我的目标平台,ComboViewer在所有情况下都表现得绝对完美,只有在SWT 3.7中,我才能始终如一地重现这个问题]

这是我的ComboViewer代码,它只是一个普通代码-

final Composite c = new Composite(parent, SWT.NONE);

//layout for the composite
GridLayoutFactory.fillDefaults().extendedMargins(0, 0, 0,5).numColumns(3).applyTo(c);

ComboViewer selectViewer = new ComboViewer(c);
selectViewer.setContentProvider(new ArrayContentProvider());
selectViewer.setLabelProvider(new CustomLabelProvider())
selectViewer.setComparator(new CustomComparator());
selectViewer.getCombo().setVisibleItemCount(15);
我尝试通过Eclipse社区论坛进行搜索,以检查是否只有SWT3.7才记录了此问题的已知错误,或者检查是否有其他人发现了此问题,以及这是否是SWT3.7的典型问题,但在Internet上找不到任何相关信息


有人能告诉我这个问题是否已经被知道了,并且在生产代码中除了下一个版本的SWT或其他什么东西之外,没有什么可以做的吗?或者,对于这个问题是否有一个已经解决的解决方法?

我很久以前就找到了解决这个问题的方法,但是错过了更新这篇文章的机会

我们需要显式地调用layout方法,以强制对更改控件(在我的示例中,控件是comboviewer)的父层次结构中的所有小部件(包括接收器)进行布局

this.layout(new Control[] { comboViewer.getCombo() });

SWT的当前版本是4.5-是的,我同意,我现在没有太多的时间来更改我的应用程序代码以与SWT 4.5兼容。我想知道这个ComboViewer问题是否是SWT3.7的已知事实?您是否在复合
c
上设置了布局?你应该在所有复合材料上设置布局。起初我认为不设置布局可能是个问题,但我也尝试在我的复合材料上设置布局,但ComboViewer的行为方式仍然类似。。