【发布时间】:2016-03-02 19:11:49
【问题描述】:
我有一个包含多个组件的向导。在向导上,我有可以过滤结果的下拉菜单,然后隐藏不需要的各种行。但是,当这些行被隐藏时,组件将保留在同一位置,并且不会重新调整大小/向上移动。我认为我的问题与此问题 (SWT components relayout after visibility set to false) 类似,但它使用 RowLayout 代替。我也尝试过复制所做的事情,但它没有改变任何东西。我如何才能将组件放在一起而不是留下空隙?
我还读到 .pack() 和 .revalidate() 可能是选项,但我似乎不知道如何使它们与向导类一起使用。据我所知,它使用 org.eclipse.jface.wizard 作为基本组件。对此的任何建议都非常感谢,如果需要澄清,我会根据需要更新我的问题。
编辑 尝试重新创建上面链接中概述的样式,我想出了这个(请注意项目抽象了一些东西,所以我必须进行一些额外的调用)。然而,在实施之后,我发现程序没有显着差异(例如,所有内容仍然在完全相同的位置,没有间距差异)。
RowData data = new RowData();
RowData data2 = new RowData();
guiPiece.getGUILayout().getPiece("label").setLayoutData(data);
guiPiece.getGUILayout().getPiece("field").setLayoutData(data2);
guiPiece.getGUILayout().getPiece("label").setVisible(newVisibility);
data = (RowData)guiPiece.getGUILayout().getPiece("label").getLayoutData();
data.exclude = !newVisibility;
guiPiece.getGUILayout().getPiece("field").setVisible(newVisibility);
data2 = (RowData)guiPiece.getGUILayout().getPiece("field").getLayoutData();
data2.exclude = !newVisibility;
guiPiece.getFieldParentingControl().layout(true);
【问题讨论】:
-
您必须完全切换到 GridLayout 和 GridData 才能使链接的答案起作用。
-
我希望这也是相关的——如果我能找到合适的组件,我可能会尝试的另一个想法是禁用它们而不是隐藏它们。 stackoverflow.com/questions/7727728/…
-
那是 Swing 而不是 SWT,一个完全不同的 GUI。