我一定是想念一些愚蠢的事。 docs清楚地说明RowLayout布局的RowData对象允许您指定最小大小(宽度和高度),这是有道理的。但是,当底层窗口小部件超过此大小时,大小不会增加,窗口小部件也会被裁剪。这真的是最低限度吗?
实施例
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Example");
shell.setBounds(100, 100, 325, 200);
shell.setLayout(new FillLayout());
Composite comp = new Composite(shell, SWT.BORDER);
comp.setLayout(new RowLayout(SWT.VERTICAL));
Label label1 = new Label(comp, SWT.CENTER);
label1.setLayoutData(new RowData(20,20));
label1.setText("Trying with bounded rowdata...");
Label label2 = new Label(comp, SWT.CENTER);
label2.setText("Trying with no rowdata...");
comp.layout(true,true); // no difference
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
结果:
答案 0 :(得分:0)
构造函数RowData(int, int)
的javadoc一定是错的!如果您仔细阅读RowData
javadoc的标题,则会说RowData
用于设置Controls
的初始大小,而非最小值。这就是为什么你的Label
被一个20x20像素的方格所折磨的原因!
答案 1 :(得分:0)
尝试在布局上关闭打包:
Composite comp = new Composite(shell, SWT.BORDER);
RowLayout layout = new RowLayout(SWT.VERTICAL);
layout.pack = false;
comp.setLayout(layout);
另一方面,如果您希望控件相对于父级调整大小但不小于最小宽度,您也可以考虑使用GridLayout
。最小宽度适用于GridData
。