For example, If your dialog is having 2 radio buttons and based on the radio button selection you wanted to change the composite area. So rather than disposing the composite every time and recreating based on the selection of a radio button, we can manage this through stacklayout.
As per eclipse doc,This Layout stacks all the controls one on top of the other and resizes all controls to have the same size and location. The control specified in topControl is visible and all other controls are not visible. Users must set the topControl value to flip between the visible items and then call layout() on the composite which has the StackLayout.
http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet249.java
This is something new learning for me!!
As per eclipse doc,This Layout stacks all the controls one on top of the other and resizes all controls to have the same size and location. The control specified in topControl is visible and all other controls are not visible. Users must set the topControl value to flip between the visible items and then call layout() on the composite which has the StackLayout.
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
final Composite parent = new Composite(shell, SWT.NONE);
parent.setLayoutData(new GridData(GridData.FILL_BOTH));
final StackLayout layout = new StackLayout();
parent.setLayout(layout);
final Button[] bArray = new Button[10];
for (int i = 0; i < 10; i++) {
bArray[i] = new Button(parent, SWT.PUSH);
bArray[i].setText("Button "+i);
}
layout.topControl = bArray[0];
Button b = new Button(shell, SWT.PUSH);
b.setText("Show Next Button");
final int[] index = new int[1];
b.addListener(SWT.Selection, new Listener(){
public void handleEvent(Event e) {
index[0] = (index[0] + 1) % 10;
layout.topControl = bArray[index[0]];
parent.layout();
}
});
shell.open();
while (shell != null && !shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
This is something new learning for me!!