16.14. Chapter Summary

 
[Page 509 ( continued )]

15.8. Combo Boxes

A combo box , also known as a choice list or drop-down list , contains a list of items from which the user can choose. It is useful in limiting a user 's range of choices and avoids the cumbersome validation of data input. Figure 15.21 lists several frequently used constructors and methods in JComboBox .

Figure 15.21. JComboBox enables you to select an item from a set of items.

The following statements create a combo box with four items, red foreground, white background, and the second item selected:

 JComboBox jcb =   new   JComboBox(   new   Object[] {   "Item 1"   ,   "Item 2"   ,   "Item 3"   ,   "Item 4"   }); jcb.setForeground(Color.red); jcb.setBackground(Color.white); jcb.setSelectedItem(   "Item 2"   ); 

JComboBox can generate ActionEvent and ItemEvent , among many other events. Whenever an item is selected, an ActionEvent is fired . Whenever a new item is selected, JComboBox generates ItemEvent twice, once for deselecting the previously selected item, and the other for selecting the currently selected item. Note that no ItemEvent is fired if the current item is reselected. To respond to an ItemEvent , you need to implement the itemStateChanged(ItemEvent e) handler for processing a choice. To get data from a JComboBox menu, you can use getSelectedItem() to return the currently selected item, or e.getItem() method to get the item from the itemStateChanged(ItemEvent e) handler.


[Page 510]

Listing 15.7 gives a program that lets users view an image and a description of a country's flag by selecting the country from a combo box, as shown in Figure 15.22.

Figure 15.22. A country's info , including a flag image and a description of the flag, is displayed when the country is selected in the combo box.

Here are the major steps in the program:

1.
Create the user interface.

Create a combo box with country names as its selection values. Create a DescriptionPanel object. The DescriptionPanel class was introduced in the preceding example. Place the combo box in the north of the frame and the description panel in the center of the frame.

2.
Process the event.

Create a listener to implement the itemStateChanged handler to set the flag title, image, and text in the description panel for the selected country name .

Listing 15.7. ComboBoxDemo.java
(This item is displayed on pages 510 - 512 in the print version)
 1   import   java.awt.*; 2   import   java.awt.event.*; 3   import   javax.swing.*; 4 5   public class    ComboBoxDemo   extends   JFrame  { 6  // Declare an array of Strings for flag titles  7   private    String[] flagTitles  = {   "Canada"   ,   "China"   ,   "Denmark"   , 8   "France"   ,   " Germany "   ,   "India"   ,   "Norway"   ,   "United Kingdom"   , 9   "United States of America"   }; 10 11  // Declare an ImageIcon array for the national flags of 9 countries  12   private    ImageIcon[] flagImage  = { 13   new   ImageIcon(   "image/ca.gif"   ), 14   new   ImageIcon(   "image/china.gif"   ), 15   new   ImageIcon(   "image/denmark.gif"   ), 16   new   ImageIcon(   "image/fr.gif"   ), 17   new   ImageIcon(   "image/germany.gif"   ), 18   new   ImageIcon(   "image/india.gif"   ), 

[Page 511]
 19   new   ImageIcon(   "image/norway.gif"   ), 20   new   ImageIcon(   "image/uk.gif"   ), 21   new   ImageIcon(   "image/us.gif"   ) 22 }; 23 24  // Declare an array of strings for flag descriptions  25   private    String[] flagDescription  =   new   String[   9   ]; 26 27  // Declare and create a description panel  28   private   DescriptionPanel descriptionPanel =   new   DescriptionPanel(); 29 30  // Create a combo box for selecting countries  31    private   JComboBox jcbo =   new   JComboBox(flagTitles);  32 33   public static void   main(String[] args) { 34 ComboBoxDemo frame =   new   ComboBoxDemo(); 35 frame.pack(); 36 frame.setTitle(   "ComboBoxDemo"   ); 37 frame.setLocationRelativeTo(null);  // Center the frame  38 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 39 frame.setVisible(   true   ); 40 } 41 42   public   ComboBoxDemo() { 43  // Set text description  44 flagDescription[     ] =   "The Maple Leaf flag \n\n"   + 45   "The Canadian National Flag was adopted by the Canadian "   + 46   "Parliament on October 22, 1964 and was proclaimed into law "   + 47   "by Her Majesty Queen Elizabeth II (the Queen of Canada) on "   + 48   "February 15, 1965. The Canadian Flag (colloquially known "   + 49   "as The Maple Leaf Flag) is a red flag of the proportions "   + 50   "two by length and one by width, containing in its center a "   + 51   "white square, with a single red stylized eleven-point "   + 52   "mapleleaf centered in the white square."   ; 53 flagDescription[   1   ] =   "Description for China ... "   ; 54 flagDescription[   2   ] =   "Description for Denmark ... "   ; 55 flagDescription[   3   ] =   "Description for France ... "   ; 56 flagDescription[   4   ] =   "Description for Germany ... "   ; 57 flagDescription[   5   ] =   "Description for India ... "   ; 58 flagDescription[   6   ] =   "Description for Norway ... "   ; 59 flagDescription[   7   ] =   "Description for UK ... "   ; 60 flagDescription[   8   ] =   "Description for US ... "   ; 61 62  // Set the first country (Canada) for display  63 setDisplay(     ); 64 65  // Add combo box and description panel to the list  66 add(jcbo, BorderLayout.NORTH); 67 add(descriptionPanel, BorderLayout.CENTER); 68 69  // Register listener  70 jcbo.addItemListener(   new   ItemListener() { 71  /** Handle item selection */  72   public void   itemStateChanged(ItemEvent e) { 73 setDisplay(jcbo.getSelectedIndex()); 74 } 75 }); 76 } 77 

[Page 512]
 78  /** Set display information on the description panel */  79   public void   setDisplay(   int   index) { 80 descriptionPanel.setTitle(flagTitles[index]); 81 descriptionPanel.setImageIcon(flagImage[index]); 82 descriptionPanel.setDescription(flagDescription[index]); 83 } 84 } 

The listener listens to ItemEvent from the combo box and implements ItemListener (lines 70 “75). Instead of using ItemEvent , you may rewrite the program to use ActionEvent for handling combo box item selection.

The program stores the flag information in three arrays: flagTitles , flagImage , and flagDescription (lines 7 “25). The array flagTitles contains the names of nine countries, the array flagImage contains images of the nine countries' flags, and the array flagDescription contains descriptions of the flags.

The program creates an instance of DescriptionPanel (line 28), which was presented in Listing 15.6, TextAreaDemo.java. The program creates a combo box with initial values from flagTitles (line 31). When the user selects an item in the combo box, the ItemStateChanged handler is executed, finds the selected index, and sets its corresponding flag title, flag image, and flag description on the panel.

 


Introduction to Java Programming-Comprehensive Version
Introduction to Java Programming-Comprehensive Version (6th Edition)
ISBN: B000ONFLUM
EAN: N/A
Year: 2004
Pages: 503

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