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希望能够根据窗口大小自动换行,但是发现结果不行,只有一行。
原因是comp的大小并不会随着窗口大小的改变,由红色背景可知,comp本身只有一行大小,无论外面窗口如何变化,它始终只有一行
解决方法,加上一句
comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
此时效果为,达到预期需要
可以看到红色区域即comp充满了客户区,并且会随着窗口大小变化,永远保证充满这个区域