0

我一定错过了一些愚蠢的东西。文档明确指出,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();
}

结果:

在此处输入图像描述

4

2 回答 2

0

尝试在布局上关闭包装:

Composite comp = new Composite(shell, SWT.BORDER);
RowLayout layout = new RowLayout(SWT.VERTICAL);
layout.pack = false;
comp.setLayout(layout);

另一方面,GridLayout如果您希望控件相对于其父级调整大小但不小于最小宽度,您也可以考虑使用。最小宽度适用于GridData.

于 2012-12-03T12:12:34.257 回答
0

构造函数的javadocRowData(int, int)一定是错的!如果您仔细阅读 javadoc 的标题,RowData据说它RowData用于设置的初始大小Controls,而不是最小值。这就是为什么你Label被裁剪为 20x20 像素的正方形!

于 2012-11-30T08:06:57.673 回答