1
11
GUI Components:
Part 1
2005 Pearson Education, Inc. All rights reserved.
Do you think I can listen all day to such stuff?
Lewis Carroll
Even a minor event in the life of a child is an event
of that child s world and thus a world event.
Gaston Bachelard
You pays your money and you takes your choice.
Punch
Guess if you can, choose if you dare.
Pierre Corneille
2005 Pearson Education Inc. All rights reserved.
OBJECTIVES
In this chapter you will learn:
The design principles of graphical user interfaces
(GUIs).
To build GUIs and handle events generated by
user interactions with GUIs.
To understand the packages containing GUI
components, event-handling classes and
interfaces.
To create and manipulate buttons, labels, lists,
text fields and panels.
To handle mouse events and keyboard events.
To use layout managers to arrange GUI
components
2005 Pearson Education, Inc. All rights reserved.
11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8
11.9
Introduction
Simple GUI-Based Input/Output with JOptionPane
Overview of Swing Components
Displaying Text and Images in a Window
Text Fields and an Introduction to Event Handling with
Nested Classes
Common GUI Event Types and Listener Interfaces
How Event Handling Works
JButton
Buttons That Maintain State
11.9.1 JCheckBox
11.9.2 JRadioButton
11.10 JComboBox and Using an Anonymous Inner Class for Event
Handling
2005 Pearson Education, Inc. All rights reserved.
11.11 JList
11.12 Multiple-Selection Lists
11.13 Mouse Event Handling
11.14 Adapter Classes
11.15
JPanel
Sublcass for Drawing with the Mouse
11.16 Key-Event Handling
11.17 Layout Managers
11.17.1
FlowLayout
11.17.2
BorderLayout
11.17.3 GridLayout
11.18 Using Panels to Manage More Complex Layouts
11.19
JTextArea
11.20 Wrap-Up
2005 Pearson Education, Inc. All rights reserved.
11.1 Introduction
Graphical user interface (GUI)
Presents a user-friendly mechanism for interacting with an
application
Often contains title bar, menu bar containing menus,
buttons and combo boxes
Built from GUI components
2005 Pearson Education, Inc. All rights reserved.
Look-and-Feel Observation 11.1
Consistent user interfaces enable a user to learn
new applications faster.
2005 Pearson Education, Inc. All rights reserved.
button
menus
title bar
menu bar
combo box
scroll
bars
Fig. 11.1 | Internet Explorer window with GUI components.
2005 Pearson Education, Inc. All rights reserved.
11.2 Simple GUI-Based Input/Output with
JOptionPane
Dialog boxes
Used by applications to interact with the user
Provided by Javas JOptionPane class
Contains input dialogs and message dialogs
2005 Pearson Education, Inc. All rights reserved.
Outline
10
Show input dialog to receive first
integer
Addition.java
(1 of 2)
Show input dialog to receive
second integer
Show message dialog to output sum
to user
2005 Pearson Education,
Inc. All rights reserved.
Input dialog displayed by lines 1011
Prompt to the user
Outline
Text field in which
the user types a
value
When the user clicks OK,
showInputDialog
returns to the program
the 100 typed by the
user as a String. The
program must convert
the String to an int
11
Addition.java
(2 of 2)
Input dialog displayed by lines 1213
title bar
Message dialog displayed by lines 2223
When the user clicks OK, the
message dialog is dismissed
(removed from the
screen)
2005 Pearson Education,
Inc. All rights reserved.
12
Look-and-Feel Observation 11.2
The prompt in an input dialog typically uses
sentence-style capitalizationa style that
capitalizes only the first letter of the first word
in the text unless the word is a proper noun (for
example, Deitel).
2005 Pearson Education, Inc. All rights reserved.
13
Look-and-Feel Observation 11.3
The title bar of a window typically uses book-title
capitalizationa style that capitalizes the first
letter of each significant word in the text and
does not end with any punctuation (for example,
Capitalization in a Book Title).
2005 Pearson Education, Inc. All rights reserved.
14
Fig. 11.3 | JOptionPane static constants for message dialogs.
2005 Pearson Education, Inc. All rights reserved.
15
11.3 Overview of Swing Components
Swing GUI components
Declared in package javax.swing
Most are pure Java components
Part of the Java Foundation Classes (JFC)
2005 Pearson Education, Inc. All rights reserved.
16
Fig. 11.4 | Some basic GUI components.
2005 Pearson Education, Inc. All rights reserved.
17
Swing vs. AWT
Abstract Window Toolkit (AWT)
Precursor to Swing
Declared in package java.awt
Does not provide consistent, cross-platform look-and-feel
2005 Pearson Education, Inc. All rights reserved.
18
Portability Tip 11.1
Swing components are implemented in Java, so
they are more portable and flexible than the
original Java GUI components from package
java.awt, which were based on the GUI
components of the underlying platform. For this
reason, Swing GUI components are generally
preferred.
2005 Pearson Education, Inc. All rights reserved.
Lightweight vs. Heavyweight GUI
Components
19
Lightweight components
Not tied directly to GUI components supported by
underlying platform
Heavyweight components
Tied directly to the local platform
AWT components
Some Swing components
2005 Pearson Education, Inc. All rights reserved.
20
Look-and-Feel Observation 11.4
The look and feel of a GUI defined with
heavyweight GUI components from package
java.awt may vary across platforms. Because
heavyweight components are tied to the localplatform GUI, the look and feel varies from
platform to platform.
2005 Pearson Education, Inc. All rights reserved.
Superclasses of Swings Lightweight GUI
Components
21
Class Component (package java.awt)
Subclass of Object
Declares many behaviors and attributes common to GUI
components
Class Container (package java.awt)
Subclass of Component
Organizes Components
Class JComponent (package javax.swing)
Subclass of Container
Superclass of all lightweight Swing components
2005 Pearson Education, Inc. All rights reserved.
22
Software Engineering Observation 11.1
Study the attributes and behaviors of the classes
in the class hierarchy of Fig. 11.5. These classes
declare the features that are common to most
Swing components.
2005 Pearson Education, Inc. All rights reserved.
23
Fig. 11.5 | Common superclasses of many of the Swing components.
2005 Pearson Education, Inc. All rights reserved.
Superclasses of Swings Lightweight GUI
Components
24
Common lightweight component features
Pluggable look-and-feel to customize the appearance of
components
Shortcut keys (called mnemonics)
Common event-handling capabilities
Brief description of components purpose (called tool tips)
Support for localization
2005 Pearson Education, Inc. All rights reserved.
11.4 Displaying Text and Images in a
Window
25
Class JFrame
Most windows are an instance or subclass of this class
Provides title bar
Provides buttons to minimize, maximize and close the
application
2005 Pearson Education, Inc. All rights reserved.
26
Labeling GUI Components
Label
Text instructions or information stating the purpose of
each component
Created with class JLabel
2005 Pearson Education, Inc. All rights reserved.
27
Look-and-Feel Observation 11.5
Text in a JLabel normally uses sentence-style
capitalization.
2005 Pearson Education, Inc. All rights reserved.
28
Specifying the Layout
Laying out containers
Determines where components are placed in the container
Done in Java with layout managers
One of which is class FlowLayout
Set with the setLayout method of class JFrame
2005 Pearson Education, Inc. All rights reserved.
Outline
29
LabelFrame.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
30
LabelFrame.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
31
LabelTest.java
2005 Pearson Education,
Inc. All rights reserved.
32
Creating and Attaching label1
Method setToolTipText of class
JComponent
Specifies the tool tip
Method add of class Container
Adds a component to a container
2005 Pearson Education, Inc. All rights reserved.
33
Common Programming Error 11.1
If you do not explicitly add a GUI component
to a container, the GUI component will not be
displayed when the container appears on the
screen.
2005 Pearson Education, Inc. All rights reserved.
34
Look-and-Feel Observation 11.6
Use tool tips to add descriptive text to your GUI
components. This text helps the user determine
the GUI components purpose in the user
interface.
2005 Pearson Education, Inc. All rights reserved.
35
Creating and Attaching label2
Interface Icon
Can be added to a JLabel with the setIcon method
Implemented by class ImageIcon
Interface SwingConstants
Declares a set of common integer constants such as those
used to set the alignment of components
Can be used with methods setHorizontalAlignment
and setVerticalAlignment
2005 Pearson Education, Inc. All rights reserved.
36
Creating and Attaching label3
Other JLabel methods
getText and setText
For setting and retrieving the text of a label
getIcon and setIcon
For setting and retrieving the icon displayed in the label
getHorizontalTextPosition and
setHorizontalTextPosition
For setting and retrieving the horizontal position of the text
displayed in the label
2005 Pearson Education, Inc. All rights reserved.
37
Fig. 11.8 | Some basic GUI components.
2005 Pearson Education, Inc. All rights reserved.
Creating and Displaying a LabelFrame
Window
38
Other JFrame methods
setDefaultCloseOperation
Dictates how the application reacts when the user clicks the
close button
setSize
Specifies the width and height of the window
setVisible
Determines whether the window is displayed (true) or not
(false)
2005 Pearson Education, Inc. All rights reserved.
11.5 Text Fields and an Introduction to
Event Handling with Nested Classes
39
GUIs are event-driven
A user interaction creates an event
Common events are clicking a button, typing in a text field,
selecting an item from a menu, closing and window and
moving the mouse
The event causes a call to a method called an event handler
2005 Pearson Education, Inc. All rights reserved.
11.5 Text Fields and an Introduction to
Event Handling with Nested Classes
40
Class JTextComponent
Superclass of JTextField
Superclass of JPasswordField
Adds echo character to hide text input in component
Allows user to enter text in the component when
component has the applications focus
2005 Pearson Education, Inc. All rights reserved.
Outline
41
TextFieldFrame
.java
(1 of 3)
Create a new JTextField
2005 Pearson Education,
Inc. All rights reserved.
Outline
42
Create a new JTextField
TextFieldFrame
.java
Create a new uneditable
JTextField (2 of 3)
Create a new JPasswordField
Create event handler
Register event handler
Create event handler class by
implementing the
ActionListener interface
Declare actionPerformed
method
2005 Pearson Education,
Inc. All rights reserved.
Test if the source of the event
is the
Outline
first text field
43
Get text from text field
TextFieldFrame
Test if the source of the event
is the
.java
second text field
(3 of 3)
Get text from text field
Test if the source of the event is the
third text field
Get text from text field
Test if the source of the event is the
password field
Get password from password field
2005 Pearson Education,
Inc. All rights reserved.
Outline
44
TextFieldTest
.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
45
TextFieldTest
.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Steps Required to Set Up Event Handling
for a GUI Component
46
Several coding steps are required for an
application to respond to events
Create a class for the event handler
Implement an appropriate event-listener interface
Register the event handler
2005 Pearson Education, Inc. All rights reserved.
Using a Nested Class to Implement an
Event Handler
47
Top-level classes
Not declared within another class
Nested classes
Declared within another class
Non-static nested classes are called inner classes
Frequently used for event handling
2005 Pearson Education, Inc. All rights reserved.
48
Software Engineering Observation 11.2
An inner class is allowed to directly access its
top-level classs variables and methods, even if
they are private.
2005 Pearson Education, Inc. All rights reserved.
Using a Nested Class to Implement an
Event Handler
49
JTextFields and JPasswordFields
Pressing enter within either of these fields causes an
ActionEvent
Processed by objects that implement the ActionListener
interface
2005 Pearson Education, Inc. All rights reserved.
Registering the Event Handler for Each
Text Field
50
Registering an event handler
Call method addActionListener to register an
ActionListener object
ActionListener listens for events on the object
2005 Pearson Education, Inc. All rights reserved.
51
Software Engineering Observation 11.3
The event listener for an event must implement
the appropriate event-listener interface.
2005 Pearson Education, Inc. All rights reserved.
52
Common Programming Error 11.2
Forgetting to register an event-handler object for
a particular GUI components event type causes
events of that type to be ignored.
2005 Pearson Education, Inc. All rights reserved.
Details of Class TextFieldHandlers
actionPerformed Method
53
Event source
Component from which event originates
Can be determined using method getSource
Text from a JTextField can be acquired using
getActionCommand
Text from a JPasswordField can be acquired using
getPassword
2005 Pearson Education, Inc. All rights reserved.
11.6 Common GUI Event Types and
Listener Interfaces
54
Event types
All are subclasses of AWTEvent
Some declared in package java.awt.event
Those specific to Swing components declared in
javax.swing.event
2005 Pearson Education, Inc. All rights reserved.
11.6 Common GUI Event Types and
Listener Interfaces
55
Delegation event model
Event source is the component with which user interacts
Event object is created and contains information about the
event that happened
Event listener is notified when an event happens
2005 Pearson Education, Inc. All rights reserved.
56
Fig. 11.11 | Some event classes of package java.awt.event.
2005 Pearson Education, Inc. All rights reserved.
57
Fig. 11.12 | Some common event-listener interfaces of package java.awt.event.
2005 Pearson Education, Inc. All rights reserved.
58
11.7 How Event Handling Works
Remaining questions
How did the event handler get registered?
How does the GUI component know to call
actionPerformed rather than some other eventhandling method?
2005 Pearson Education, Inc. All rights reserved.
59
Registering Events
Every JComponent has instance variable
listenerList
Object of type EventListenerList
Maintains references to all its registered listeners
2005 Pearson Education, Inc. All rights reserved.
60
Fig. 11.13 | Event registration for JTextField textField1 .
2005 Pearson Education, Inc. All rights reserved.
61
Event-Handler Invocation
Events are dispatched to only the event listeners
that match the event type
Events have a unique event ID specifying the event type
MouseEvents are handled by
MouseListeners and
MouseMotionsListeners
KeyEvents are handled by KeyListeners
2005 Pearson Education, Inc. All rights reserved.
62
11.8 JButton
Button
Component user clicks to trigger a specific action
Can be command button, check box, toggle button or radio
button
Button types are subclasses of class AbstractButton
2005 Pearson Education, Inc. All rights reserved.
63
Look-and-Feel Observation 11.7
Buttons typically use book-title capitalization.
2005 Pearson Education, Inc. All rights reserved.
64
11.8 JButton
Command button
Generates an ActionEvent when it is clicked
Created with class JButton
Text on the face of the button is called button label
2005 Pearson Education, Inc. All rights reserved.
65
Look-and-Feel Observation 11.8
Having more than one JButton with the same
label makes the JButtons ambiguous to the user.
Provide a unique label for each button.
2005 Pearson Education, Inc. All rights reserved.
66
Fig. 11.14 | Swing button hierarchy.
2005 Pearson Education, Inc. All rights reserved.
Outline
67
ButtonFrame.java
(1 of 2)
Declare two JButton instance
variables
Create new JButton
Create two ImageIcons
Create new JButton
Set rollover icon for JButton
2005 Pearson Education,
Inc. All rights reserved.
Outline
68
Create handler for buttons
ButtonFrame.java
Register event handler
(2 of 2)
Inner class implements
ActionListener
Access outer classs instance using
this reference
Get text of JButton pressed
2005 Pearson Education,
Inc. All rights reserved.
Outline
69
ButtonTest.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
70
ButtonTest.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
71
11.8 JButton
JButtons can have a rollover icon
Appears when mouse is positioned over a button
Added to a JButton with method setRolloverIcon
2005 Pearson Education, Inc. All rights reserved.
72
Look-and-Feel Observation 11.9
Because class AbstractButton supports
displaying text and images on a button, all
subclasses of AbstractButton also support
displaying text and images.
2005 Pearson Education, Inc. All rights reserved.
73
Look-and-Feel Observation 11.10
Using rollover icons for JButtons provides
users with visual feedback indicating that when
they click the mouse while the cursor is
positioned over the button, an action will occur.
2005 Pearson Education, Inc. All rights reserved.
74
Software Engineering Observation 11.4
When used in an inner class, keyword this
refers to the current inner-class object being
manipulated. An inner-class method can use its
outer-class objects this by preceding this
with the outer-class name and a dot, as in
ButtonFrame.this.
2005 Pearson Education, Inc. All rights reserved.
75
11.9 Buttons That Maintain State
State buttons
Swing contains three types of state buttons
JToggleButton, JCheckBox and JRadioButton
JCheckBox and JRadioButton are subclasses of
JToggleButton
2005 Pearson Education, Inc. All rights reserved.
76
11.9.1 JCheckBox
JCheckBox
Contains a check box label that appears to right of check
box by default
Generates an ItemEvent when it is clicked
ItemEvents are handled by an ItemListener
Passed to method itemStateChanged
Method isSelected returns whether check box is
selected (true) or not (false)
2005 Pearson Education, Inc. All rights reserved.
Outline
77
CheckBoxFrame
.java
(1 of 3)
Declare two JCheckBox instance
variables
Set font of text field
2005 Pearson Education,
Inc. All rights reserved.
Outline
78
Create two JCheckBoxes
CheckBoxFrame
.java
Create event handler
(2 of 3)
Register event handler with
JCheckBoxes
Inner class implements
ItemListener
itemStateChanged method is
called when a JCheckBox is
clicked
Test whether JCheckBox is
selected
2005 Pearson Education,
Inc. All rights reserved.
Outline
79
Test source of the event
isSelected method returns
CheckBoxFrame
.java
whether JCheckBox is selected
(3 of 3)
2005 Pearson Education,
Inc. All rights reserved.
Outline
80
CheckBoxTest
.java
2005 Pearson Education,
Inc. All rights reserved.
81
11.9.2 JRadioButton
JRadioButton
Has two states selected and unselected
Normally appear in a group in which only one radio button
can be selected at once
Group maintained by a ButtonGroup object
Declares method add to add a JRadioButton to
group
Usually represents mutually exclusive options
2005 Pearson Education, Inc. All rights reserved.
82
Common Programming Error 11.3
Adding a ButtonGroup object (or an object of any
other class that does not derive from Component)
to a container results in a compilation error.
2005 Pearson Education, Inc. All rights reserved.
Outline
83
RadioButtonFrame.
java
(1 of 3)
Declare four JRadioButtons
and a ButtonGroup to manage
them
2005 Pearson Education,
Inc. All rights reserved.
Outline
84
RadioButtonFrame
.java
(2 of 3)
Create the four JRadioButtons
Create the ButtonGroup
Add each JRadioButton to the
ButtonGroup
2005 Pearson Education,
Inc. All rights reserved.
Outline
85
Register an event handler with each
JRadioButton
RadioButtonFrame
.java
(3 of 3)
Event handler inner class
implements ItemListener
When radio button is selected, the
text fields font will be set to the
value passed to the constructor
2005 Pearson Education,
Inc. All rights reserved.
Outline
86
RadioButtonTest
.java
2005 Pearson Education,
Inc. All rights reserved.
11.10 JComboBox and Using an Anonymous
Inner Class for Event Handling
87
Combo box
Also called a drop-down list
Implemented by class JComboBox
Each item in the list has an index
setMaximumRowCount sets the maximum number of
rows shown at once
JComboBox provides a scrollbar and up and down arrows
to traverse list
2005 Pearson Education, Inc. All rights reserved.
88
Look-and-Feel Observation 11.11
Set the maximum row count for a JComboBox to a
number of rows that prevents the list from
expanding outside the bounds of the window in
which it is used. This configuration will ensure
that the list displays correctly when it is expanded
by the user.
2005 Pearson Education, Inc. All rights reserved.
Using an Anonymous Inner Class for
Event Handling
89
Anonymous inner class
Special form of inner class
Declared without a name
Typically appears inside a method call
Has limited access to local variables
2005 Pearson Education, Inc. All rights reserved.
Outline
90
ComboBoxFrame
.java
(1 of 2)
Declare JComboBox instance
variable
2005 Pearson Education,
Inc. All rights reserved.
Create JComboBox and set
Outline
maximum row count
91
Create anonymous inner class as
the event handler ComboBoxrame
.java
Declare method (2 of 2)
itemStateChanged
Test state change of JComboBox
Method getSelectedIndex
locates selected item
2005 Pearson Education,
Inc. All rights reserved.
Outline
92
ComboBoxTest
.java
Scrollbar to scroll through the
items in the list
scroll arrows
scroll box
2005 Pearson Education,
Inc. All rights reserved.
93
Software Engineering Observation 11.5
An anonymous inner class declared in a method
can access the instance variables and methods of
the top-level class object that declared it, as well
as the methods final local variables, but cannot
access the methods non-final variables.
2005 Pearson Education, Inc. All rights reserved.
94
Software Engineering Observation 11.6
Like any other class, when an anonymous inner
class implements an interface, the class must
implement every method in the interface.
2005 Pearson Education, Inc. All rights reserved.
95
11.11 JList
List
Displays a series of items from which the user may select
one or more items
Implemented by class JList
Allows for single-selection lists or multiple-selection lists
A ListSelectionEvent occurs when an item is selected
Handled by a ListSelectionListener and passed to
method valueChanged
2005 Pearson Education, Inc. All rights reserved.
Outline
96
ListFrame.java
(1 of 2)
Declare JList instance variable
2005 Pearson Education,
Inc. All rights reserved.
Outline
Create JList
97
ListFrame.java
Set selection mode of JList
(2 of 2)
Add JList to ScrollPane and
add to application
Get index of selected item
2005 Pearson Education,
Inc. All rights reserved.
Outline
98
ListTest.java
2005 Pearson Education,
Inc. All rights reserved.
99
11.12 Multiple-Selection Lists
Multiple-selection list
Enables users to select many items
Single interval selection allows only a continuous range of
items
Multiple interval selection allows any set of elements to be
selected
2005 Pearson Education, Inc. All rights reserved.
Outline
100
Multiple
SelectionFrame
.java
(1 of 3)
2005 Pearson Education,
Inc. All rights reserved.
Outline
101
Use a multiple interval selection list
Multiple
SelectionFrame
.java
(2 of 3)
Use methods setListData and
getSelectedValues to copy
values from one JList to the other
2005 Pearson Education,
Inc. All rights reserved.
Outline
102
Set cell width for presentation
Multiple
Set cell height for presentation
SelectionFrame
.java
(3 of 3)
Set selection model to single
interval selection
2005 Pearson Education,
Inc. All rights reserved.
Outline
103
Multiple
SelectionTest
.java
2005 Pearson Education,
Inc. All rights reserved.
104
11.13 Mouse Event Handling
Mouse events
Create a MouseEvent object
Handled by MouseListeners and
MouseMotionListeners
MouseInputListener combines the two interfaces
Interface MouseWheelListener declares method
mouseWheelMoved to handle MouseWheelEvents
2005 Pearson Education, Inc. All rights reserved.
105
Fig. 11.27 | MouseListener and MouseMotionListener interface
methods. (Part 1 of 2.)
2005 Pearson Education, Inc. All rights reserved.
106
Fig. 11.27 | MouseListener and MouseMotionListener interface
methods. (Part 2 of 2.)
2005 Pearson Education, Inc. All rights reserved.
107
Look-and-Feel Observation 11.12
Method calls to mouseDragged and mouseReleased
are sent to the MouseMotionListener for the
Component on which a mouse drag operation
started. Similarly, the mouseReleased method call
at the end of a drag operation is sent to the
MouseListener for the Component on which the
drag operation started.
2005 Pearson Education, Inc. All rights reserved.
Outline
108
MouseTracker
Frame.java
(1 of 4)
Create JPanel to capture mouse
events
Set background to white
Create JLabel and add to
application
2005 Pearson Education,
Inc. All rights reserved.
Outline
Create event handler for mouse
events
109
Register event handler
MouseTracker
Frame.java
Implement mouse listener interfaces
(2 of 4)
Declare mouseClicked method
Find location of mouse click
Declare mousePressed method
Declare mouseReleased method
2005 Pearson Education,
Inc. All rights reserved.
Outline
110
Declare mouseEntered method
MouseTracker
Frame.java
Set background of JPanel
(3 of 4)
Declare mouseExited method
Set background of JPanel
2005 Pearson Education,
Inc. All rights reserved.
Outline
111
Declare mouseDragged method
MouseTracker
Frame.java
(4 of 4)
Declare mouseMoved method
2005 Pearson Education,
Inc. All rights reserved.
Outline
112
MouseTracker
Frame.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
113
MouseTracker
Frame.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
114
11.14 Adapter Classes
Adapter class
Implements event listener interface
Provides default implementation for all event-handling
methods
2005 Pearson Education, Inc. All rights reserved.
115
Software Engineering Observation 11.7
When a class implements an interface, the class
has an is a relationship with that interface. All
direct and indirect subclasses of that class inherit
this interface. Thus, an object of a class that
extends an event-adapter class is an object of the
corresponding event-listener type (e.g., an object
of a subclass of MouseAdapter is a
MouseListener).
2005 Pearson Education, Inc. All rights reserved.
116
Extending MouseAdapter
MouseAdapter
Adapter class for MouseListener and
MouseMotionListener interfaces
Extending class allows you to override only the methods
you wish to use
2005 Pearson Education, Inc. All rights reserved.
117
Common Programming Error 11.4
If you extend an adapter class and misspell the
name of the method you are overriding, your
method simply becomes another method in the
class. This is a logic error that is difficult to detect,
since the program will call the empty version of
the method inherited from the adapter class.
2005 Pearson Education, Inc. All rights reserved.
118
Fig. 11.30 | Event-adapter classes and the interfaces they implement in
package java.awt.event.
2005 Pearson Education, Inc. All rights reserved.
Outline
119
MouseDetails
Frame.java
(1 of 2)
Register event handler
2005 Pearson Education,
Inc. All rights reserved.
Outline
120
MouseDetails
Frame.java
(2 of 2)
Get number of times mouse button
was clicked
Test for right mouse button
Test for middle mouse button
2005 Pearson Education,
Inc. All rights reserved.
Outline
121
MouseDetails
.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
122
MouseDetails
.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
11.15 JPanel Subclass for Drawing with
the Mouse
123
Overriding class JPanel
Provides a dedicated drawing area
2005 Pearson Education, Inc. All rights reserved.
124
Fig. 11.33 | InputEvent methods that help distinguish among left-,
center- and right-mouse-button clicks.
2005 Pearson Education, Inc. All rights reserved.
125
Method paintComponent
Method paintComponent
Draws on a Swing component
Overriding method allows you to create custom drawings
Must call superclass method first when overridden
2005 Pearson Education, Inc. All rights reserved.
126
Look-and-Feel Observation 11.13
Most Swing GUI components can be
transparent or opaque. If a Swing GUI
component is opaque, its background will be
cleared when its paintComponent method is
called. Only opaque components can display
a customized background color. JPanel
objects are opaque by default.
2005 Pearson Education, Inc. All rights reserved.
127
Error-Prevention Tip 11.1
In a JComponent subclasss paintComponent
method, the first statement should always be a
call to the superclasss paintComponent method
to ensure that an object of the subclass displays
correctly.
2005 Pearson Education, Inc. All rights reserved.
128
Common Programming Error 11.5
If an overridden paintComponent method does
not call the superclasss version, the subclass
component may not display properly. If an
overridden paintComponent method calls the
superclasss version after other drawing is
performed, the drawing will be erased.
2005 Pearson Education, Inc. All rights reserved.
129
Defining the Custom Drawing Area
Customized subclass of JPanel
Provides custom drawing area
Class Graphics is used to draw on Swing components
Class Point represents an x-y coordinate
2005 Pearson Education, Inc. All rights reserved.
Outline
130
PaintPanel.java
(1 of 2)
Create array of Points
2005 Pearson Education,
Inc. All rights reserved.
Anonymous inner class for event
Outline
handling
131
Override mouseDragged method
PaintPanel.java
(2 of 2)
Get location of mouse cursor
Repaint the JFrame
Get the x and y-coordinates of the
Point
2005 Pearson Education,
Inc. All rights reserved.
132
Look-and-Feel Observation 11.14
Calling repaint for a Swing GUI component
indicates that the component should be
refreshed on the screen as soon as possible. The
background of the GUI component is cleared
only if the component is opaque. JComponent
method setOpaque can be passed a boolean
argument indicating whether the component is
opaque (true) or transparent (false).
2005 Pearson Education, Inc. All rights reserved.
133
Look-and-Feel Observation 11.15
Drawing on any GUI component is performed
with coordinates that are measured from the
upper-left corner (0, 0) of that GUI component,
not the upper-left corner of the screen.
2005 Pearson Education, Inc. All rights reserved.
Outline
134
Painter.java
(1 of 2)
Create instance of custom drawing
panel
2005 Pearson Education,
Inc. All rights reserved.
Outline
135
Painter.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
136
11.16 Key-Event Handling
KeyListener interface
For handling KeyEvents
Declares methods keyPressed, keyReleased and
keyTyped
2005 Pearson Education, Inc. All rights reserved.
Outline
137
KeyDemoFrame
.java
(1 of 3)
Implement KeyListener
interface
Set background color
Register application as event
handler for itself
2005 Pearson Education,
Inc. All rights reserved.
Outline
138
Declare keyPressed method
Get code of pressed keyKeyDemoFrame
.java
(2 of 3)
Declare keyReleased method
Get code of released key
Declare keyTyped method
Output character typed
2005 Pearson Education,
Inc. All rights reserved.
Outline
139
Test if it was an action key
KeyDemoFrame
.java
Determine any modifiers pressed
(3 of 3)
2005 Pearson Education,
Inc. All rights reserved.
Outline
140
KeyDemo.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
141
KeyDemo.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
142
11.17 Layout Managers
Layout managers
Provided to arrange GUI components in a container
Provide basic layout capabilities
Implement the interface LayoutManager
2005 Pearson Education, Inc. All rights reserved.
143
Look-and-Feel Observation 11.16
Most Java programming environments
provide GUI design tools that help a
programmer graphically design a GUI; the
design tools then write the Java code to create
the GUI. Such tools often provide greater
control over the size, position and alignment
of GUI components than do the built-in layout
managers.
2005 Pearson Education, Inc. All rights reserved.
144
Look-and-Feel Observation 11.17
It is possible to set a Containers layout to null,
which indicates that no layout manager should
be used. In a Container without a layout
manager, the programmer must position and
size the components in the given container and
take care that, on resize events, all components
are repositioned as necessary. A components
resize events can be processed by a
ComponentListener.
2005 Pearson Education, Inc. All rights reserved.
145
11.17.1 FlowLayout
FlowLayout
Simplest layout manager
Components are placed left to right in order they are
added
Components can be left aligned, centered or right aligned
2005 Pearson Education, Inc. All rights reserved.
146
Fig. 11.38 | Layout managers.
2005 Pearson Education, Inc. All rights reserved.
Outline
147
FlowLayoutFrame
.java
(1 of 3)
Create FlowLayout
Set layout of application
2005 Pearson Education,
Inc. All rights reserved.
Outline
148
Add JButton; FlowLayout
will handle placement
FlowLayoutFrame
.java
(2 of 3)
Set alignment to left
Adjust layout
Add JButton; FlowLayout
will handle placement
Set alignment to center
2005 Pearson Education,
Inc. All rights reserved.
Outline
149
Adjust layout
FlowLayoutFrame
.java
(3 of 3)
Add JButton; FlowLayout
will handle placement
Set alignment to right
Adjust layout
2005 Pearson Education,
Inc. All rights reserved.
Outline
150
FlowLayoutDemo
.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
151
FlowLayoutDemo
.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
152
11.17.2 BorderLayout
BorderLayout
Arranges components into five regions north, south, east,
west and center
Implements interface LayoutManager2
Provides horizontal gap spacing and vertical gap spacing
2005 Pearson Education, Inc. All rights reserved.
153
Look-and-Feel Observation 11.18
Each container can have only one layout manager.
Separate containers in the same application can
use different layout managers.
2005 Pearson Education, Inc. All rights reserved.
154
Look-and-Feel Observation 11.19
If no region is specified when adding a Component
to a BorderLayout, the layout manager assumes
that the Component should be added to region
BorderLayout.CENTER.
2005 Pearson Education, Inc. All rights reserved.
155
Common Programming Error 11.6
When more than one component is added to a
region in a BorderLayout, only the last component
added to that region will be displayed. There is no
error that indicates this problem.
2005 Pearson Education, Inc. All rights reserved.
Outline
156
BorderLayout
Frame.java
(1 of 2)
Declare BorderLayout instance
variable
Create BorderLayout
Set layout
Register event handler
2005 Pearson Education,
Inc. All rights reserved.
Outline
157
BorderLayout
Add buttons to application Frame.java
using
layout manager constants
(2 of 2)
Make button invisible
Make button visible
Update layout
2005 Pearson Education,
Inc. All rights reserved.
Outline
158
BorderLayout
Demo.java
(1 of 2)
horizontal gap
vertical gap
2005 Pearson Education,
Inc. All rights reserved.
Outline
159
BorderLayout
Demo.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
160
11.17.3 GridLayout
GridLayout
Divides container into a grid
Every component has the same width and height
2005 Pearson Education, Inc. All rights reserved.
Outline
161
GridLayout
Frame.java
(1 of 2)
Declare two GridLayout
instance variables
Create GridLayout
Set layout
2005 Pearson Education,
Inc. All rights reserved.
Outline
162
Add button to JFrameGridLayout
Frame.java
(2 of 2)
Use second layout
Use first layout
Update layout
2005 Pearson Education,
Inc. All rights reserved.
Outline
163
GridLayoutDemo
.java
2005 Pearson Education,
Inc. All rights reserved.
11.18 Using Panels to Manage More
Complex Layouts
164
Complex GUIs often require multiple panels to
arrange their components properly
2005 Pearson Education, Inc. All rights reserved.
Outline
165
PanelFrame.java
(1 of 2)
Declare a JPanel to hold buttons
Create JPanel
Set layout
2005 Pearson Education,
Inc. All rights reserved.
Outline
166
Add button to panel PanelFrame.java
(2 of 2)
Add panel to application
2005 Pearson Education,
Inc. All rights reserved.
Outline
167
PanelDemo.java
2005 Pearson Education,
Inc. All rights reserved.
168
11.19 JTextArea
JTextArea
Provides an area for manipulating multiple lines of text
Box container
Subclass of Container
Uses a BoxLayout layout manager
2005 Pearson Education, Inc. All rights reserved.
169
Look-and-Feel Observation 11.20
To provide line-wrapping functionality for a
JTextArea, invoke JTextArea method setLineWrap with a true argument.
2005 Pearson Education, Inc. All rights reserved.
Outline
170
TextAreaFrame
.java
(1 of 2)
Declare JTextArea instance
variables
Create a Box container
Create text area and add to box
2005 Pearson Education,
Inc. All rights reserved.
Outline
171
Add button to box
TextAreaFrame
.java
(2 of 2)
Copy selected text from one text
area to the other
Create second text area and add it
to box
2005 Pearson Education,
Inc. All rights reserved.
Outline
172
TextAreaDemo
.java
(1 of 2)
2005 Pearson Education,
Inc. All rights reserved.
Outline
173
TextAreaDemo
.java
(2 of 2)
2005 Pearson Education,
Inc. All rights reserved.
174
JScrollPane Scrollbar Policies
JScrollPane has scrollbar policies
Horizontal policies
Always (HORIZONTAL_SCROLLBAR_ALWAYS)
As needed (HORIZONTAL_SCROLLBAR_AS_NEEDED)
Never (HORIZONTAL_SCROLLBAR_NEVER)
Vertical policies
Always (VERTICAL_SCROLLBAR_ALWAYS)
As needed (VERTICAL_SCROLLBAR_AS_NEEDED)
Never (VERTICAL_SCROLLBAR_NEVER)
2005 Pearson Education, Inc. All rights reserved.