当主要合成最大化/最小化时,JFace ComboViewer会自行调整大小

时间:2016-02-08 06:19:23

标签: java combobox swt jface composite

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

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

[请注意 - 这种奇怪的行为仅在SWT 3.7中发生,我尝试在Eclipse中使用SWT 3.5重置我的目标平台,并且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或其他内容,否则在生产代码中无法做到这一点?或者如果已经解决了这个问题的解决方法?

1 个答案:

答案 0 :(得分:0)

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

我们需要显式调用layout方法来强制布局更改控件的父层次结构中的所有窗口小部件(在我的情况下,控件是组合查看器),直到并包括接收器。

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