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

Recipe 8.5 Positioning Widgets and Using Layouts

8.5.1 Problem

You need to position a widget in an SWT shell.

8.5.2 Solution

Several possibilities are available; for example, you can use the widget's setBounds method, other methods, or an SWT layout.

8.5.3 Discussion

You can specify where to place an SWT widget anywhere in a shell by using its setBounds method like so (all measurements are in pixels, where (0, 0) is at upper left):

Label label = new Label(composite, SWT.PUSH);
label.setText("Label 0");
label.setBounds(100, 100, 150, 120);

Alternatively, you can use the setLocation(int x, int y) method to position a widget's upper left corner, followed by the setSize(int width, int height) method to set the widget's size.

Besides using the setSize method, you can use the widget's pack( ) method to let the widget resize itself to its preferred size (for example, for a button, pack( ) sets the size of the button to just enclose its caption).


You also can use an SWT layout to specify how to arrange your widgets. Four layout classes are built into SWT:


FillLayout

Fills a shell's client area


FormLayout

Arranges widgets relative to a parent composite or to another widget


GridLayout

Arranges widgets in a grid


RowLayout

Arranges widgets in either horizontal rows or vertical columns

Here's an example using the grid layout. In this case, we're going to create a grid of four columns, filling those columns with SWT labels. We start by creating a new GridLayout object, setting the number of columns in the layout to 4, and installing that layout in the shell with the setLayout method:

import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class LayoutClass {

    public static void main (String [] args) {
        Display display = new Display ( );
        final Shell shell = new Shell (display);
        shell.setSize(200, 200);
        shell.setText("Layout Example");
        GridLayout gridLayout = new GridLayout( );
        gridLayout.numColumns = 4;
        shell.setLayout(gridLayout);
        .
        .
        .

All you need to do now is to create a set of labels and add them to the layout, where they'll be arranged in a grid automatically, as shown in Example 8-4.

Example 8-4. Using SWT layouts
package org.cookbook.ch08;

import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class LayoutClass {

    public static void main (String [] args) {
        Display display = new Display ( );
        final Shell shell = new Shell (display);
        shell.setSize(200, 200);
        shell.setText("Layout Example");
        GridLayout gridLayout = new GridLayout( );
        gridLayout.numColumns = 4;
        shell.setLayout(gridLayout);
        
        for (int loopIndex = 0; loopIndex < 28; loopIndex++) {
            Label label = new Label(shell, SWT.SHADOW_NONE);
            label.setText("Label " + loopIndex);
        }

        shell.open ( );
        while (!shell.isDisposed( )) {
            if (!display.readAndDispatch( )) display.sleep( );
        }
        display.dispose ( );
    }
}

You can see the results in Figure 8-5, showing the labels in a grid layout.

Figure 8-5. Labels in a grid layout
figs/ecb_0805.gif


8.5.4 See Also

Recipe 8.6 on creating button and text widgets; Recipe 8.9 on creating composite widgets; Recipe 8.8 on creating list widgets; Chapter 7 of Eclipse (O'Reilly).

    Previous Section  < Day Day Up >  Next Section