Learning Java Chapter 14: Using Swing Components
Because the popup menu is triggered by mouse events, we need to register a
MouseListener for any of the components to which it applies.
In this example, all three buttons and the content pane of the frame are
eligible for the color popup menu. Therefore, we add a mouse event listener
for all of these components explicitly. The same instance of an anonymous
inner MouseAdapter subclass is used in each case. In this
class, we override the mousePressed( ), mouse-Released(
), and mouseClicked( ) methods to display the popup
menu when we get an appropriate event. How do we know what an "appropriate
event" is? Fortunately, we don't need to worry about the specifics of our
user's platform; we just need to call the event's isPopupTrigger(
) method. If this method returns true, we know the user
has done whatever normally displays a popup menu on his or her system.
Once we know that the user wants to raise a popup menu, we display the
popup menu by calling its show( ) method with the mouse event
coordinates as arguments.
If we wanted to provide different menus for different types of components
or the background, we'd create different mouse listeners for each different
kind of component. The mouse listeners would invoke different kinds of
popup menus as appropriate.
The only thing left is to handle the action events from the popup menu
items. We use a helper method called makeMenuItem( ) to
register the PopUpColorMenu window as an action listener for
every item we add. The example implements ActionListener and
has the required actionPerformed( ) method. This method reads
the action command from the event, which is equal to the selected menu
item's label by default. It then sets the background color of the selected
component appropriately.
The JScrollPane Class
We used JScrollPane earlier in this chapter without explaining
much about it. In this section we'll remedy the situation.
A JScrollPane is a container that can hold one component. Said
another way, a JScrollPane wraps another component. By
default, if the wrapped component is larger than the
JScrollPane itself, the JScrollPane supplies
scrollbars. JScrollPane handles the events from the scrollbars
and displays the appropriate portion of the contained component.
Technically, JScrollPane is a Container, but it's
a funny one. It has its own layout manager, which can't be changed. It can
accommodate only one component at a time. This seems like a big limitation,
but it isn't. If you want to put a lot of stuff in a
JScrollPane, just put your components into a
JPanel, with whatever layout manager you like, and put that
panel into the JScrollPane.
When you create a JScrollPane, you can specify the conditions
under which its scrollbars will be displayed. This is called the
scrollbar display policy; a separate policy is used for the
horizontal and vertical scrollbars. The following constants can be used to
specify the policy for each of the scrollbars:
HORIZONTAL_SCROLLBAR_AS_NEEDED
- Displays a scrollbar only if the wrapped component
doesn't fit.
HORIZONTAL_SCROLLBAR_ALWAYS
- Always shows a scrollbar, regardless of the contained
component's size.
HORIZONTAL_SCROLLBAR_NEVER
- Never shows a scrollbar, even if the contained
component won't fit. If you use this policy, you should provide some other
way to manipulate the
JScrollPane.
VERTICAL_SCROLLBAR_AS_NEEDED
- Displays a scrollbar only if the wrapped component
doesn't fit.
VERTICAL_SCROLLBAR_ALWAYS
- Always shows a scrollbar, regardless of the contained
component's size.
VERTICAL_SCROLLBAR_NEVER
- Never shows a scrollbar, even if the contained
component won't fit. If you use this policy, you should provide some other
way to manipulate the
JScrollPane.
By default, the policies are HORIZONTAL_SCROLLBAR_AS_NEEDED
and VERTICAL_SCROLLBAR_AS_NEEDED.
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|