代码:
final Composite sectionClient = toolkit.createComposite(parent, SWT.NONE);
sectionClient.setLayout(UIHelper.getLayoutForWidgets(new GridLayout(2, true)));
sectionClient.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Composite leftColumnComposite = toolkit.createComposite(sectionClient);
leftColumnComposite.setLayout(new GridLayout(5, false));
leftColumnComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Composite rightColumnComposite = toolkit.createComposite(sectionClient);
rightColumnComposite.setLayout(new GridLayout(5, false));
rightColumnComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
前:
后:
说明:
当窗口最小化(即用户逐步最小化它)时,右列与左列重叠。鉴于容器的布局,我希望这些列不会重叠。甚至一些小部件也被隐藏了。
我错过了什么?我对布置组件的不同方法持开放态度。
SSCCE / 大量样板代码(所有元素均来自SWT):
/**
*
* @author ggrec
*
*/
public class ILovePancakes
{
private FormToolkit toolkit;
public static void main(final String[] args)
{
new ILovePancakes();
}
private ILovePancakes()
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
toolkit = new FormToolkit(display);
createWidgets(shell);
shell.open();
while (!shell.isDisposed())
{
if ( !display.readAndDispatch() )
display.sleep();
}
display.dispose();
}
private void createWidgets(final Composite parent)
{
// Main section
final Section section = toolkit.createSection(parent, ExpandableComposite.COMPACT | ExpandableComposite.TITLE_BAR);
section.setText("Main section");
section.setLayout(new GridLayout());
section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// Section client
final Composite sectionClient = toolkit.createComposite(section, SWT.NONE);
sectionClient.setLayout(UIHelper.getLayoutForWidgets(new GridLayout(2, true)));
sectionClient.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
section.setClient(sectionClient);
// --------------------- <Left Column> -----------------------
final Composite leftColumnComposite = toolkit.createComposite(sectionClient);
leftColumnComposite.setLayout(new GridLayout(5, false));
leftColumnComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// Name
final Label label_1 = new Label(leftColumnComposite, SWT.NONE);
label_1.setText("Name");
final Text nameWidget = new Text(leftColumnComposite, SWT.BORDER);
nameWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 4, 1));
// P&L
final Label label_2 = new Label(leftColumnComposite, SWT.NONE);
label_2.setText("Profit and Loss");
final Combo pnlFilterWidget = new Combo(leftColumnComposite, SWT.BORDER);
pnlFilterWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// Background color
final Label label_3 = new Label(leftColumnComposite, SWT.NONE);
label_3.setText("Bkg color");
final Button bkgColorSelector = new Button(leftColumnComposite, SWT.PUSH);
bkgColorSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// Clear bkgColor button
final Button clearBkgColorButton = new Button(leftColumnComposite, SWT.PUSH);
clearBkgColorButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// --------------------- <Right Column> -----------------------
final Composite rightColumnComposite = toolkit.createComposite(sectionClient);
rightColumnComposite.setLayout(new GridLayout(5, false));
rightColumnComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// Code
final Label label_4 = new Label(rightColumnComposite, SWT.NONE);
label_4.setText("Code");
final Text codeWidget = new Text(rightColumnComposite, SWT.BORDER);
codeWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 4, 1));
// Font Style
final Label label_5 = new Label(rightColumnComposite, SWT.NONE);
label_5.setText("Font Style");
final Combo fontStyleWidget = new Combo(rightColumnComposite, SWT.BORDER);
fontStyleWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// Font color
final Label label_6 = new Label(rightColumnComposite, SWT.NONE);
label_6.setText("Font color");
final Button fontColorSelector = new Button(rightColumnComposite, SWT.PUSH);
fontColorSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// Clear fontColor button
final Button clearFontColorButton = new Button(rightColumnComposite, SWT.PUSH);
clearFontColorButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
}
}