我有一个包含多个组件的向导。在向导中,我有可以过滤结果的下拉菜单,然后隐藏不需要的各种行。但是,当隐藏这些行时,组件将保留在同一位置,并且不会重新调整大小/向上移动。我认为我的问题类似于这个问题(SWT components relayout after visibility set to false),但它使用的是RowLayout。我也试过复制已经完成的工作,但它没有改变任何东西。如何将组件放置到togeather而不是留下间隙?
我也读过.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);
答案 0 :(得分:0)
您可以使用与您提供的GridLayout
链接类似的方法,但使用RowLayout
。
您需要在每个控件上设置RowData
布局数据。
RowData data = new RowData();
control.setLayoutData(data);
RowData
还有一个exclude
标记,您可以在布局中设置包含/排除控件。
所以要隐藏你要做的控件:
control.setVisible(false);
RowData data = (RowData)control.getLayoutData();
data.exclude = true;
然后在向导页面的主要Composite上调用layout(true)
。