【问题标题】:SWT RowLayout: what is the minimum size?SWT RowLayout:最小尺寸是多少?
【发布时间】:2012-12-03 20:12:34
【问题描述】:

我一定错过了一些愚蠢的东西。 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();
}

结果:

【问题讨论】:

  • 你想在这里实现什么目标?
  • 这只是一个例子。但我想要的是文档似乎暗示的内容:为布局内的小部件设置最小尺寸,使其至少获得该尺寸。

标签: java layout swt


【解决方案1】:

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

【讨论】:

  • 我不同意。根据RowData(int width, int height) 的JavaDoc:width - 控件的最小宽度height - 控件的最小高度。所以它确实应该设置 minimal 大小,而不是初始大小。
  • 我的错!这个版本的构造函数的javadoc我没看过……一定是javadoc错误……
【解决方案2】:

尝试在布局上关闭包装:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2011-03-26
    • 2011-10-12
    • 2011-02-05
    • 2012-09-30
    相关资源
    最近更新 更多