JPopupMenu

Many of today's computer applications provide so-called context-sensitive pop-up menus. In Swing, such menus are created with class JPopupMenu (a subclass of JComponent). These menus provide options that are specific to the component for which the popup trigger event was generated. On most systems, the pop-up trigger event occurs when the user presses and releases the right mouse button.

Look-and-Feel Observation 22.9

The pop-up trigger event is platform specific. On most platforms that use a mouse with multiple buttons, the pop-up trigger event occurs when the user clicks the right mouse button on a component that supports a pop-up menu.

The application in Figure 22.7 and Fig. 22.8 creates a JPopupMenu that allows the user to select one of three colors and change the background color of the window. When the user clicks the right mouse button on the PopupTest window's background, a JPopupMenu containing colors appears. If the user clicks a JRadioButtonMenuItem for a color, ItemHandler method actionPerformed changes the background color of the window's content pane.

Figure 22.7. JPopupMenu for selecting colors.

(This item is displayed on pages 1020 - 1021 in the print version)

 1 // Fig. 22.7: PopupFrame.java
 2 // Demonstrating JPopupMenus.
 3 import java.awt.Color;
 4 import java.awt.event.MouseAdapter;
 5 import java.awt.event.MouseEvent;
 6 import java.awt.event.ActionListener;
 7 import java.awt.event.ActionEvent;
 8 import javax.swing.JFrame;
 9 import javax.swing.JRadioButtonMenuItem;
10 import javax.swing.JPopupMenu;
11 import javax.swing.ButtonGroup;
12
13 public class PopupFrame extends JFrame
14 {
15 private JRadioButtonMenuItem items[]; // holds items for colors
16 private final Color colorValues[] =
17 { Color.BLUE, Color.YELLOW, Color.RED }; // colors to be used
18 private JPopupMenu popupMenu; // allows user to select color
19
20 // no-argument constructor sets up GUI
21 public PopupFrame()
22 {
23 super( "Using JPopupMenus" );
24
25 ItemHandler handler = new ItemHandler(); // handler for menu items
26 String colors[] = { "Blue", "Yellow", "Red" }; // array of colors
27
28 ButtonGroup colorGroup = new ButtonGroup(); // manages color items
29 popupMenu = new JPopupMenu(); // create pop-up menu
30 items = new JRadioButtonMenuItem[ 3 ]; // items for selecting color
31
32 // construct menu item, add to popup menu, enable event handling
33 for ( int count = 0; count < items.length; count++ )
34 {
35 items[ count ] = new JRadioButtonMenuItem( colors[ count ] );
36 popupMenu.add( items[ count ] ); // add item to pop-up menu
37 colorGroup.add( items[ count ] ); // add item to button group
38 items[ count ].addActionListener( handler ); // add handler
39 } // end for
40
41 setBackground( Color.WHITE ); // set background to white
42 
43 // declare a MouseListener for the window to display pop-up menu
44 addMouseListener(
45 
46 new MouseAdapter() // anonymous inner class
47 {
48 // handle mouse press event
49 public void mousePressed( MouseEvent event )
50 {
51 checkForTriggerEvent( event ); // check for trigger
52 } // end method mousePressed
53 
54 // handle mouse release event
55 public void mouseReleased( MouseEvent event )
56 {
57 checkForTriggerEvent( event ); // check for trigger
58 } // end method mouseReleased
59 
60 // determine whether event should trigger popup menu
61 private void checkForTriggerEvent( MouseEvent event )
62 {
63 if ( event.isPopupTrigger() ) 
64  popupMenu.show( 
65  event.getComponent(), event.getX(), event.getY() );
66 } // end method checkForTriggerEvent
67 } // end anonymous inner class
68 ); // end call to addMouseListener
69 } // end PopupFrame constructor
70 
71 // private inner class to handle menu item events
72 private class ItemHandler implements ActionListener
73 {
74 // process menu item selections
75 public void actionPerformed( ActionEvent event )
76 {
77 // determine which menu item was selected
78 for ( int i = 0 ; i < items.length; i++ )
79 {
80 if ( event.getSource() == items[ i ] )
81 {
82 getContentPane() .setBackground( colorValues[ i ] );
83 return;
84 } // end if
85 } // end for
86 } // end method actionPerformed
87 } // end private inner class ItemHandler
88 } // end class PopupFrame

Figure 22.8. Test class for PopupFrame.

(This item is displayed on page 1022 in the print version)

 1 // Fig. 22.8: PopupTest.java
 2 // Testing PopupFrame.
 3 import javax.swing.JFrame;
 4
 5 public class PopupTest
 6 {
 7 public static void main( String args[] )
 8 {
 9 PopupFrame popupFrame = new PopupFrame(); // create PopupFrame
10 popupFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
11 popupFrame.setSize( 300, 200 ); // set frame size
12 popupFrame.setVisible( true ); // display frame
13 } // end main
14 } // end class PopupTest
 

Line 25 of the PopupFrame constructor (lines 2169) creates an instance of class ItemHandler (declared in lines 7287) that will process the item events from the menu items in the pop-up menu. Line 29 creates the JPopupMenu. The for statement (lines 3339) creates a JRadioButtonMenuItem object (line 35), adds it to popupMenu (line 36), adds it to ButtonGroup colorGroup (line 37) to maintain one selected JRadioButtonMenuItem at a time and registers its ActionListener (line 38). Line 41 sets the initial background to white by invoking method setBackground.

Lines 4468 register a MouseListener to handle the mouse events of the application window. Methods mousePressed (lines 4952) and mouseReleased (lines 5558) check for the pop-up trigger event. Each method calls private utility method checkForTriggerEvent (lines 6166) to determine whether the pop-up trigger event occurred. If it did, MouseEvent method isPopupTrigger returns TRue, and JPopupMenu method show displays the JPopupMenu. The first argument to method show specifies the origin component, whose position helps determine where the JPopupMenu will appear on the screen. The last two arguments are the x-y coordinates (measured from the origin component's upper-left corner) at which the JPopupMenu is to appear.

Look-and-Feel Observation 22.10

Displaying a JPopupMenu for the pop-up trigger event of multiple GUI components requires registering mouse-event handlers for each of those GUI components.

When the user selects a menu item from the pop-up menu, class ItemHandler's method actionPerformed (lines 7586) determines which JRadioButtonMenuItem the user selected and sets the background color of the window's content pane.

Introduction to Computers, the Internet and the World Wide Web

Introduction to Java Applications

Introduction to Classes and Objects

Control Statements: Part I

Control Statements: Part 2

Methods: A Deeper Look

Arrays

Classes and Objects: A Deeper Look

Object-Oriented Programming: Inheritance

Object-Oriented Programming: Polymorphism

GUI Components: Part 1

Graphics and Java 2D™

Exception Handling

Files and Streams

Recursion

Searching and Sorting

Data Structures

Generics

Collections

Introduction to Java Applets

Multimedia: Applets and Applications

GUI Components: Part 2

Multithreading

Networking

Accessing Databases with JDBC

Servlets

JavaServer Pages (JSP)

Formatted Output

Strings, Characters and Regular Expressions

Appendix A. Operator Precedence Chart

Appendix B. ASCII Character Set

Appendix C. Keywords and Reserved Words

Appendix D. Primitive Types

Appendix E. (On CD) Number Systems

Appendix F. (On CD) Unicode®

Appendix G. Using the Java API Documentation

Appendix H. (On CD) Creating Documentation with javadoc

Appendix I. (On CD) Bit Manipulation

Appendix J. (On CD) ATM Case Study Code

Appendix K. (On CD) Labeled break and continue Statements

Appendix L. (On CD) UML 2: Additional Diagram Types

Appendix M. (On CD) Design Patterns

Appendix N. Using the Debugger

Inside Back Cover



Java(c) How to Program
Java How to Program (6th Edition) (How to Program (Deitel))
ISBN: 0131483986
EAN: 2147483647
Year: 2003
Pages: 615

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