JFace ComboViewer 在主复合最大化/最小化时调整自身大小



在JFace向导中,我有一个主复合和一个组合查看器。当我第一次打开窗口时,我可以看到 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 社区论坛,以检查是否仅在 SWT 3.7 中记录了此问题的已知错误,或者检查是否有其他人发现了这个问题,以及这是否是 SWT 3.7 的典型问题,但在互联网上找不到任何相关信息。

有人可以告诉我这个问题是否已经知道,并且除非下一个版本的 SWT 或其他东西,否则在生产代码中无能为力? 或者,如果已经解决了这个问题的解决方法?

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

我们需要显式调用布局方法,以强制将更改控件的父层次结构中的所有小部件(在我的例子中,控件是组合查看器(的布局,直到并包括接收器。

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

最新更新