stackLayout
指的是堆叠布局,拥有该布局的控件可以包含若干控件,但是这些控件具有相同的大小和位置。每次通过指定布局的topControl属性来指定要显示的控件,而其他的控件不显示。指定显示的控件之后要调用包含该布局控件的layout方法重新布局,实例如下:
import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class StackLLayout1 { /** * Launch the application. * * @param args */ public static void main(String[] args) { Display display = Display.getDefault(); Shell shell = new Shell(); shell.setSize(450, 300); shell.setText("SWT Application"); shell.setLayout(new FillLayout()); final Composite comp1 = new Composite(shell, SWT.NONE); final StackLayout stackLayout = new StackLayout(); comp1.setLayout(stackLayout); // 在comp1中创建两个文本框text final Text txt1 = new Text(comp1, SWT.BORDER); txt1.setText("txt1"); final Text txt2 = new Text(comp1, SWT.BORDER); txt2.setText("txt2"); //stackLayout.topControl = txt1; Composite comp2 = new Composite(shell, SWT.NONE); comp2.setLayout(new RowLayout()); Button btnButton1 = new Button(comp2, SWT.NONE); btnButton1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { stackLayout.topControl = txt1; //必须指定显示的控件 comp1.layout(); //重新布局 } }); btnButton1.setBounds(360, 10, 72, 22); btnButton1.setText("显示txt1"); Button btnButton2 = new Button(comp2, SWT.NONE); btnButton2.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { stackLayout.topControl = txt2; comp1.layout(); } }); btnButton2.setBounds(360, 80, 72, 22); btnButton2.setText("显示txt2"); shell.open(); shell.layout(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } }
结果如下: