Recipe 8.9 Creating Composite Widgets

     

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
figs/ecb_0808.gif

Besides composite widgets, other widgets that can contain widgets include canvases (designed for drawing) and groups (which can display borders as well).



Eclipse Cookbook
Inside XML (Inside (New Riders))
ISBN: 596007108
EAN: 2147483647
Year: 2006
Pages: 232
Authors: Steve Holzner

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net