< Day Day Up > |
Recipe 8.9 Creating Composite Widgets8.9.1 ProblemTo create your own custom widget, you need to create a widget that contains other widgets. 8.9.2 SolutionUse 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 DiscussionA 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 widgetspackage 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 widgetBesides composite widgets, other widgets that can contain widgets include canvases (designed for drawing) and groups (which can display borders as well). |
< Day Day Up > |