简体   繁体   中英

SWT RowLayout: what is the minimum size?

I must be missing something stupid. The docs clearly state that the RowData object for the RowLayout layout lets you specify a minimum size (width and height), which makes sense. However, when the underlying widget exceeds this size, the size does not increases and the widget is cropped. Is it really a minimum?

Example

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();
}

Result:

在此处输入图片说明

The javadoc of the constructor RowData(int, int) must be wrong! If you read carrefully the header of the RowData javadoc, it is said that RowData are used to set an initial size for Controls , not the minimum. That's why your Label is croped by a square of 20x20 px!

Try turning packing off on the layout:

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

On the other hand you can also consider using a GridLayout if you want the controls to resize with respect to their parents but not less than a minimum width. The minimum width works with GridData .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM