网格布局

当在 Composite(或 Composite 的子类)上使用 GridLayout 时,子控件应将其布局数据设置为 GridData唯一实例,以指示子项应如何在父项中显示: [](http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Flayout%2FGridData.html)

// ...
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout());

final Composite child = new Composite(shell, SWT.NONE);
child.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// ...

未能在子控件上设置 GridData 对象可能会导致孩子无法按照需要定位。此外,如果孩子是 Composite(或 Composite 的子类),则可能根本看不到孩子及其孩子。

如果使用了错误的布局数据(例如 FormData 而不是 GridData),结果将是运行时的 ClassCastException

线程 main 中的异常 java.lang.ClassCastException:org.eclipse.swt.layout.FormData 无法强制转换为 org.eclipse.swt.layout.GridData