10.1.1 Problem Space is at a premium in your application, and you want to divide your widgets into a set of pages. 10.1.2 Solution Try a tab folder widget, which enables you to stack pages of widgets. Create a new TabFolder object, add TabItem objects to it, and use the TabItem objects as widget containers. 10.1.3 Discussion Tab folders are not difficult to create and stack with widgets. Just create an object of the TabFolder class, as in the TabApp example in the code for the book. Here's a selection of the most popular TabFolder methods : -
- void addSelectionListener(SelectionListener listener)
-
Adds the listener to the collection of listeners who will be notified when the tab folder's selection changes -
- TabItem getItem(int index)
-
Returns the item at the given zero-relative index in the tab folder -
- int getItemCount( )
-
Returns the number of items in the tab folder -
- TabItem[] getItems( )
-
Returns an array of TabItem objects that are the items in the tab folder -
- void setSelection(int index)
-
Selects the item at the given zero-relative index in the tab folder Here's how the TabApp application creates a tab folder: final TabFolder tabFolder = new TabFolder(shell, SWT.BORDER); . . . After creating a tab folder, add as many TabItem objects as you need to create the pages in the tab folder. Here's a selection of the most useful TabItem methods: -
- TabFolder getParent( )
-
Returns the tab item's parent, which must be a TabFolder object -
- void setControl(Control control)
-
Sets the control that is used to fill the client area of the tab item -
- void setImage(Image image)
-
Sets the tab item's image -
- void setText(String string)
-
Sets the tab item's text -
- void setToolTipText(String string)
-
Sets the tab item's tool tip text In this example, we'll add 10 pages to the tab folder by creating 10 new TabItem objects and connecting them to the tab folder by passing the tabFolder object to the TabItem constructor: final TabFolder tabFolder = new TabFolder(shell, SWT.BORDER); for (int loopIndex = 0; loopIndex < 10; loopIndex++) { TabItem tabItem = new TabItem(tabFolder, SWT.NULL); tabItem.setText("Tab " + loopIndex); . . . } All that remains is to add widgetswe'll use text widgets in this exampleto each tab page using the page's setControl method, and to open the shell, as shown in Example 10-1. Example 10-1. Using SWT tab folders package org.cookbook.ch10; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; public class TabClass { public static void main(String[] args) { Display display = new Display( ); final Shell shell = new Shell(display); shell.setText("Tab Folder Example"); shell.setSize(450, 250); final TabFolder tabFolder = new TabFolder(shell, SWT.BORDER); for (int loopIndex = 0; loopIndex < 10; loopIndex++) { TabItem tabItem = new TabItem(tabFolder, SWT.NULL); tabItem.setText("Tab " + loopIndex); Text text = new Text(tabFolder, SWT.BORDER); text.setText("This is page " + loopIndex); tabItem.setControl(text); } tabFolder.setSize(400, 200); shell.open( ); while (!shell.isDisposed( )) { if (!display.readAndDispatch( )) display.sleep( ); } display.dispose( ); } } You can see this application at work in Figure 10-1. The user can select the tabs to display the various text widgetsa useful control if screen space is at a premium and you want to stack widgets in an easy way. Figure 10-1. A tab folder at work |