DekGenius.com
Previous Section  < Day Day Up >  Next Section

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).

    Previous Section  < Day Day Up >  Next Section