SWT RowLayout:最小尺寸是多少?

时间:2012-11-29 19:42:26

标签: java layout swt

我一定是想念一些愚蠢的事。 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();
}

结果:

enter image description here

2 个答案:

答案 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