8.9.1 Problem To create your own custom widget, you need to create a widget that contains other widgets. 8.9.2 Solution Use a container widget such as a composite widget to create an object from the Composite class. Then add widgets to the composite object as you would to a Shell object. 8.9.3 Discussion A number of widgets, such as composite widgets, are designed to hold other widgets, which enables you to build composite widgets. Example 8-7 displays a composite widget ( CompositeApp at this book's site). In this case, we'll display the same labels that we displayed using a grid layout, but in a shell in a composite widget instead. First, we create a composite widget and install a grid layout in it: final Composite composite = new Composite(shell, SWT.NONE); GridLayout gridLayout = new GridLayout( ); gridLayout.numColumns = 4; composite.setLayout(gridLayout); Now treat the composite widget as a container, just like a shell, and add the label widgets to it, as shown in Example 8-7. Example 8-7. Using composite widgets package org.cookbook.ch08; import org.eclipse.swt.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; public class CompositeClass { public static void main (String [] args) { Display display = new Display ( ); final Shell shell = new Shell (display); shell.setSize(300, 300); shell.setLayout(new RowLayout( )); shell.setText("Composite Example"); final Composite composite = new Composite(shell, SWT.NONE); GridLayout gridLayout = new GridLayout( ); gridLayout.numColumns = 4; composite.setLayout(gridLayout); sfor (int loopIndex = 0; loopIndex < 28; loopIndex++) { Label label = new Label(composite, SWT.SHADOW_NONE); label.setText("Label " + loopIndex); } shell.open ( ); while (!shell.isDisposed( )) { if (!display.readAndDispatch( )) display.sleep( ); } display.dispose ( ); } } The composite widget holding the labels appears in the shell, as shown in Figure 8-8. Figure 8-8. Using a composite widget Besides composite widgets, other widgets that can contain widgets include canvases (designed for drawing) and groups (which can display borders as well). |