RowLayout不能自动换行问题

代码如下:
public class Test {
	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);
		shell.setLayout(new GridLayout());
		Composite comp = new Composite(shell, SWT.NONE);
//		comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

		comp.setBackground(new Color(display, 255, 0, 0));
		RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);
		comp.setLayout(rowLayout);

		for (int i = 0; i < 100; i++) {
			new Button(comp, SWT.NONE).setText(""+i);
		}
		shell.pack();
		shell.setSize(565, 300);
		shell.open();

		while (!shell.isDisposed()) {

			if (!display.readAndDispatch()) {

				display.sleep();
			}
		}
	}
}



使用RowLayout希望能够根据窗口大小自动换行,但是发现结果不行,只有一行。

RowLayout不能自动换行问题_第1张图片


原因是comp的大小并不会随着窗口大小的改变,由红色背景可知,comp本身只有一行大小,无论外面窗口如何变化,它始终只有一行

解决方法,加上一句

comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

此时效果为,达到预期需要

RowLayout不能自动换行问题_第2张图片

可以看到红色区域即comp充满了客户区,并且会随着窗口大小变化,永远保证充满这个区域


你可能感兴趣的:(RowLayout不能自动换行问题)