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