UNIT 3 Event-Handling
UNIT 3 Event-Handling
1
javax
Originally, everything that was part of the standard API was part of the
java package, whereas everything that was not part of the
standard API was released under the package name javax.
Hence, packages essential to the API was java, while javax contained the
extensions to the API. It can even be said that javax, is just java with an
x, which stands for extension.
Over time the extensions that were released as javax, become integral to
the Java API. However, moving the extension from the javax package to
the java package would be too cumbersome and would end up breaking a
bunch of existing code. Hence, eventually it was decided that the javax
packages would become part of the standard API.
So, practically there is no difference between Java and Javax. It is all in a
name.
2
Why is Swing Called Swing?
The story is: The team went to Hobees for lunch, and the topic turned to what
to name the new toolkit we were writing. Up till then the name was code
named KFC, which was chosen by our manager (Rick Levenson) as a way to
ensure we'd come with with a better name before shipping; he knew there was
no way "KFC", aka Kentucky Fried Chicken, would be allowed by the lawyers.
Some names that were tossed around included Juliet and Carousel. There were
many more, but none felt "just right."
Finally after lunch, while driving back to Sun, Amy Fowler (lead engineer of
the team) asked our most hip team member, Georges Saab, "Georges, you
know what's up and coming... what's the new happening thing in San
Francisco?"
Georges responded with "Swing dancing is getting to be really big." And that
was it, we all knew it was perfect. When we got back to the office I did a global
search and replace of "kfc" with "swing", and the rest is history.
3
Event Handling
Any program that uses GUI (graphical user interface)
such as Java application written for windows, is event driven.
4
Changing the state of an object is known as an event.
For example: clicking on a button, Entering a character in
Textbox, moving the mouse, selecting an item from list, scrolling
the page, etc.
The java.awt.event package provides many event classes and
Listener interfaces for event handling.
5
Delegation Event Model
The modern approach to handling events is based on the
delegation event model.
The delegation event model provides a standard
mechanism for a source to generate an event and
send it to a set of listeners.
6
Delegation Event Model
Its concept is quite simple: a source generates an event
and sends it to one or more listeners.
In this scheme, the listener simply waits until it receives
an event. Once received, the listener processes the event
and then returns.
The advantage of this design is that the application logic
that processes events is cleanly separated from the user
interface logic that generates those events.
A user interface element is able to “delegate” the
processing of an event to a separate piece of code.
7
8
In the delegation event model, listener must register with a
source in order to receive an event notification.
Notification are sent only to listeners that want to receive them.
There are mainly three parts in delegation event model.
Events.
Event sources.
Event Listeners.
9
Components of Event Handling
Events
An event is a change of state of an object.
It can be generated as a consequence of a person
interacting with the elements in a graphical user
interface.
Some of the activities that cause events to be generated
are pressing a button, entering a character via the
keyboard, selecting an item in a list, and clicking the
mouse.
10
Event
Events may also occur that are not directly
caused by interactions with a user interface.
For example, an event may be generated
when a timer expires, a counter exceeds
a value, software or hardware failure
occurs, or an operation is completed.
We are free to define events that are appropriate for an
application.
11
Event Sources
A source is an object that generates an event. This
occurs when the internal state of that object changes in
some way.
Sources may generate more than one type of event.
A source must register listeners in order for the listeners
to receive notifications about a specific type of event.
Each type of event has its own registration method.
12
Here is the general form to register listeners:
public void addTypeListener(TypeListener el)
For example: b.addActionListener(this);
Here, type is the name of the event, and el is a reference to the
event listener.
For example, the method that registers a keyboard event listener is
called addKeyListener().
The method that registers a mouse motion listener is called
addMouseMotionListener().
When an event occurs, all registered listeners are notified and
receive a copy of the event object.
13
The general form of unregister listener method is this:
14
Event Listeners
A listener is an object that is notified when an event
occurs.
It has two major requirements. First, it must have
been registered with one or more sources to receive
notifications about specific types of events.
Second, it must implement methods to receive and
process these notifications.
The method that receive and process events are defined
in a set of interfaces found in java.awt.event.
15
Event Listeners
For example, the MouseMotionListener interface
defines two methods to receive notifications when
the mouse is dragged or moved.
Any object may receive and process one or both of
these events if it provides an implementation of this
interface.
16
17
Important Event Classes
and Interface
18
Event Classes
The classes that represent events are at the core of Java’s
event handling mechanism.
At the root of the Java event class hierarchy is EventObject,
which is in java.util. It is the superclass for all events.
EventObject contains two methods: getSource( ) and
toString( ).
The getSource( ) method returns the source of the event. Its
general form is shown here:
Object getSource( )
As expected, toString( ) returns the string equivalent of the
event.
19
Event Classes
The class AWTEvent, defined within the java.awt
package, is a subclass of EventObject.
It is the superclass (either directly or indirectly) of all
AWT-based events used by the delegation event model.
EventObject is a superclass of all events.
AWTEvent is a superclass of all AWT events
that are handled by the delegation event
model
20
Event Classes Description Listener Interface
ActionEvent generated when button is pressed, menu-item is selected, ActionListener
list-item is double clicked
22
Registration Methods
For registering the component with the Listener, many classes provide the
registration methods. For example:
Button
public void addActionListener(ActionListener a){}
MenuItem
public void addActionListener(ActionListener a){}
TextField
public void addActionListener(ActionListener a){}
public void addTextListener(TextListener a){}
TextArea
public void addTextListener(TextListener a){}
Checkbox
public void addItemListener(ItemListener a){}
Choice
public void addItemListener(ItemListener a){}
List
public void addActionListener(ActionListener a){}
23
public void addItemListener(ItemListener a){}
ActionEvent
An ActionEvent is generated when a button is
pressed, a list item is double-clicked, or a menu item
is selected.
The ActionEvent class defines four integer constants that are used
to identify modifiers associated with an action event:
public static final int ALT_MASK The alt modifier.
An indicator that the alt key was held down during the event.
public static final int SHIFT_MASK The shift modifier.
An indicator that the shift key was held down during the event.
public static final int CTRL_MASK The control modifier.
An indicator that control key was held down during the event.
public static final int META_MASK The meta modifier.
An indicator that the meta key was held down during the event.
(The Meta key is a modifier key on certain keyboards)
Constructor-1
public
ActionEvent(Object source,int id,String command,int modifiers)
25
Constructor-2
public
ActionEvent(Object source,int id,String command,long when,
int modifiers)
26
modifiers - the modifier keys held down during this action
Methods
public String getActionCommand()
Returns the command string associated with this action.
int getModifiers()
Returns the modifier keys held down during this action event.
String paramString()
Returns a parameter string identifying this action event.
27
ActionListener Interface
28
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
if(action.equals("Ok"))
actionMessage = "Ok Button Pressed";
else if(action.equals("Cancel"))
actionMessage = "Cancel Button Pressed";
repaint();
}
}
30
31
ComponentEvent class
A low-level event which indicates that a component
moved, changed size, or changed visibility.
This class has following constants.
public static final int COMPONENT_MOVED
This event indicates that the component's position changed.
public static final int COMPONENT_RESIZED
This event indicates that the component's size changed.
public static final int COMPONENT_SHOWN
This event indicates that the component was made visible.
public static final int COMPONENT_HIDDEN
This event indicates that the component was become invisible.
32
public ComponentEvent(Component source, int id)
Constructs a ComponentEvent object.
Parameters:
source - the Component that originated the event
id - an integer indicating the type of event
Component getComponent()
Returns the creator of the event.
the Component object that originated the event, or null if the object is
not a Component.
33
ComponentLIstener interface
The listener interface for receiving component events.
void componentResized(ComponentEvent e)
Invoked when the component's size changes.
void componentMoved(ComponentEvent e)
Invoked when the component's position changes
void componentShown(ComponentEvent e)
Invoked when the component has been made visible.
void componentHidden(ComponentEvent e)
Invoked when the component has been made invisible.
34
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComponentEventExample1
{
public static void main(String[] args)
{
JFrame frame = new JFrame("ComponentEventExample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TextArea txtArea = new TextArea();
Checkbox checkbox1 = new Checkbox("Checkbox 1");
Checkbox checkbox2 = new Checkbox("Checkbox 2");
frame.add(txtArea, BorderLayout.CENTER);
frame.add(checkbox1, BorderLayout.NORTH);
frame.add(checkbox2, BorderLayout.SOUTH);
frame.setVisible(true);
ComponentListener componentListener = new MyCompList();
frame.addComponentListener(componentListener);
}
35 }
class MyCompList implements ComponentListener
{
public void componentShown(ComponentEvent evt)
{
System.out.println("componentShown");
}
public void componentHidden(ComponentEvent evt)
{
System.out.println("componentHidden");
}
public void componentMoved(ComponentEvent evt)
{
System.out.println("componentMoved");
}
public void componentResized(ComponentEvent evt)
{
System.out.println("componentResized");
}
36 }
37
ContainerEvent class
A low-level event which indicates that a container's
contents changed because a component was added or
removed
This class has following constants.
public static final int COMPONENT_ADDED
This event indicates that a component was added to the container.
public static final int COMPONENT_REMOVED
This event indicates that a component was removed from the
container.
38
public ContainerEvent(Component source, int id,
Component child)
Parameters:
source - the Component object (container) that originated the event
39
public Container getContainer()
Returns the originator of the event.
Returns the Container object that originated the event, or null if the
object is not a Container.
40
ContainerListener interface
The listener interface for receiving container events.
void componentAdded(ContainerEvent e)
Invoked when a component has been added to the container.
41
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
frame.setSize(300, 200);
frame.show();
}
44
}
45
FocusEvent class
46
Constructors
public
FocusEvent(Component source,int id,boolean temporary,
Component opposite)
47
public
FocusEvent(Component source,int id,boolean temporary)
id - an integer indicating the type of event
temporary - true if the focus change is temporary; false otherwise.
48
Methods
public boolean isTemporary()
Identifies the focus change event as temporary or permanent.
Returns: true if the focus change is temporary; false otherwise
public Component getOppositeComponent()
Returns the other Component involved in this focus change.
49
FocusListener interface
void focusGained(FocusEvent e)
Invoked when a component gains the keyboard focus.
void focusLost(FocusEvent e)
Invoked when a component loses the keyboard focus.
50
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public FocusListenerExample()
{
b1=new Button ("First");
b2=new Button ("Second");
add(b1,BorderLayout.SOUTH);
add(b2,BorderLayout.NORTH);
b1.addFocusListener(this);
b2.addFocusListener(this);
setSize(200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
51
public void focusGained(FocusEvent fe) //method of focuslistener
{
if(fe.getSource()==b1)
System.out.println(b1.getLabel()+"gained");
if(fe.getSource()==b2)
System.out.println(b2.getLabel()+"gained");
if(fe.isTemporary())
System.out.println("Temporary Focus");
}
public void focusLost(FocusEvent fe) //in focusevent "getID()"is a method
{
if(fe.getSource()==b1)
System.out.println(b1.getLabel()+"lost");
if(fe.getSource()==b2)
System.out.println(b2.getLabel()+"lost");
}
public static void main(String a[])
{
new FocusListenerExample();
}
52 }
53
ItemEvent class
54
public ItemEvent (ItemSelectable source, int id,
Object item, int stateChange)
Constructs an ItemEvent object.
Parameters:
source - the ItemSelectable object that originated the event
id - an integer that identifies the event type
item - an object -- the item affected by the event
stateChange - an integer that indicates whether the item was selected
or deselected
55
Methods of ItemEvent Class
public ItemSelectable getItemSelectable()
Returns the creator of the event.
Returns: the ItemSelectable object that originated the event.
public Object getItem()
Returns the item affected by the event.
Returns: the item (object) that was affected by the event.
public int getStateChange()
Returns the type of state change (selected or deselected).
Returns: an integer that indicates whether the item was selected or
deselected
56
ItemListener interface
void itemStateChanged(ItemEvent e)
Invoked when an item has been selected or deselected by the user.
The code written for this method performs the operations that need
to occur when an item is selected (or deselected).
57
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
58
public void init()
{
java = new Checkbox("Java");
vb = new Checkbox("Visual Basic");
c = new Checkbox("C");
add(java);
add(vb);
add(c);
java.addItemListener(this);
vb.addItemListener(this);
c.addItemListener(this);
}
public void paint(Graphics g)
{
g.drawString("Java: " + java.getState(),10,80);
g.drawString("VB: " + vb.getState(), 10, 100);
g.drawString("C: " + c.getState(), 10, 120);
}
public void itemStateChanged(ItemEvent ie)
{
repaint();
59 }
}
60
KeyEvent class
An event which indicates that a keystroke occurred in a
component.
This class has following constant.
public static final int KEY_PRESSED
This event is generated when a key is pushed down.
public static final int KEY_RELEASED
This event is generated when a key is let up.
public static final int KEY_TYPED
This event is generated when a character is entered. In the
simplest case, it is produced by a single key press. Often,
however, characters are produced by series of key presses,
and the mapping from key pressed events to key typed
events may be many-to-one or many-to-many.
61
There are many other integer constants that are defined
by KeyEvent. For example
VK_0 to VK_9
VK_A to VK_Z define the ASCII equivalents of the numbers
and letters.
62
Methods of KeyEvent class
public int getKeyCode()
Returns the integer keyCode associated with the key in this
event.
Returns: the integer code for an actual key on the keyboard.
public char getKeyChar()
Returns the character associated with the key in this event.
For example, the KEY_TYPED event for shift + "a" returns the
value for "A".
• boolean isActionKey()
Returns true if the key firing the event is an action key.
Examples of action keys include Page Up, Caps Lock, the
arrow and function keys.
63
KeyListener Interface
Key events indicate when the user is typing at the
keyboard.
64
The first kind of event is called a key-typed event.
To know when the user presses the F1 key, or whether the user
pressed the '3' key on the number pad, you handle key-pressed
events.
65
Methods of KeyListener Interface
Method Purpose
keyTyped(KeyEvent) Called just after the user types a
Unicode character into the listened-to
component.
keyPressed(KeyEvent) Called just after the user presses a key
while the listened-to component has
the focus.
keyReleased(KeyEvent) Called just after the user releases a
key while the listened-to component
has the focus.
66
import java.awt.*;
import java.awt.event.*;
import javax.swing.JApplet;
public class EventDemo6 extends JApplet implements KeyListener
{
String event; // description of keyboard event
public void init() // set up UI
{
setLayout(new FlowLayout());
event = ""; addKeyListener(this); // listen for keyboard events
setFocusable(true); // force applet to receive KeyEvent
}
public void paint(Graphics g) // draw message to applet
{
super.paint(g);
g.drawRect(0, 0, getWidth(), getHeight()); // show bounds of applet
g.drawString(event, 10, 50);
}
67
public void keyPressed(KeyEvent e) // handle key presses
{
event = e.getKeyChar() + " pressed"; repaint();
}
public void keyReleased(KeyEvent e) // handle key releases
{
event = e.getKeyChar() + " released"; repaint();
}
public void keyTyped(KeyEvent e) // handle typing on applet
{
event = e.getKeyChar() + " typed"; repaint();
}
}
68
TextEvent class
A semantic event which indicates that an object's text changed.
This high-level event is generated by an object (such as a
TextComponent) when its text changes.
69
TextListener interface
The listener interface for receiving text events.
void textValueChanged(TextEvent e)
Invoked when the value of the text has changed.
The code written for this method performs the operations that
need to occur when text changes.
70
WindowEvent class
A low-level event indicates that a window has changed its status.
71
int constants
WINDOW_ACTIVATED
WINDOW_CLOSED
WINDOW_CLOSING
WINDOW_DEACTIVATED
WINDOW_DEICONIFIED
WINDOW_GAINED_FOCUS
WINDOW_ICONIFIED
WINDOW_LOST_FOCUS
WINDOW_OPENED
WINDOW_STATE_CHANGED
72
Constructors
public WindowEvent(Window source,int id)
Constructs a WindowEvent object.
Parameters: source - the Window object that originated the event
id - an integer indicating the type of event
73
public Window getWindow()
Returns the originator of the event.
Returns: the Window object that originated the event
74
WindowListener interface
void windowOpened(WindowEvent e)
Invoked the first time a window is made visible.
void windowClosing(WindowEvent e)
Invoked when the user attempts to close the window from the window's system
menu.
void windowClosed(WindowEvent e)
Invoked when a window has been closed as the result of calling dispose on the
window
void windowIconified(WindowEvent e)
Invoked when a window is changed from a normal to a minimized state. For many
platforms, a minimized window is displayed as the icon specified in the window's
iconImage property.
void windowDeiconified(WindowEvent e)
Invoked when a window is changed from a minimized to a normal state.
void windowActivated(WindowEvent e)
Invoked when the Window is set to be the active Window.
void windowDeactivated(WindowEvent e)
Invoked when a Window is no longer the active Window.
75
WindowFocusListener interface
The listener interface for receiving WindowEvents, including
WINDOW_GAINED_FOCUS and WINDOW_LOST_FOCUS
events.
void windowGainedFocus(WindowEvent e)
Invoked when the Window is set to be the focused Window, which means that
the Window, or one of its subcomponents, will receive keyboard events.
void windowLostFocus(WindowEvent e)
Invoked when the Window is no longer the focused Window, which means that
keyboard events will no longer be delivered to the Window or any of its
subcomponents.
76
MouseEvent class
This event indicates a mouse action occurred in a component.
This low-level event is generated by a component object for
Mouse Events and Mouse motion events.
77
Constants for java.awt.event.MouseEvent class:
Mouse events notify when the user uses the mouse (or
similar input device) to interact with a component.
81
Methods of MouseListener Interface
Method Purpose
mouseClicked(MouseEvent) Called just after the user clicks the
listened-to component.
mouseEntered(MouseEvent) Called just after the cursor enters the
bounds of the listened-to component.
mouseExited(MouseEvent) Called just after the cursor exits the
bounds of the listened-to component.
mousePressed(MouseEvent) Called just after the user presses a
mouse button while the cursor is over
the listened-to component.
mouseReleased(MouseEvent) Called just after the user releases a
mouse button after a mouse press over
the listened-to component.
82
MouseMotionListener Interface
Mouse-motion events notify when the user uses the mouse (or a
similar input device) to move the onscreen cursor.
83
Methods of MouseMotionListener Interface
Method Purpose
84
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
85
public void paint(Graphics g) // draw message to screen
{
super.paint(g);
repaint();
86
}
public void mouseClicked(MouseEvent e) // save coordinates of clicks
{
x = e.getX();
y = e.getY();
event = "click";
repaint();
}
repaint();
}
87
public void mouseEntered(MouseEvent e) // save coordinates when mouse enters applet
{
x = e.getX();
y = e.getY();
event = "enter";
repaint();
}
repaint();
}
}
/*<applet code=MouseEventDemo height=300 width=300></applet>*/
88
AdjustmentEvent
An AdjustmentEvent is generated by a scroll bar. There are five
types of adjustment events.
The AdjustmentEvent class defines integer constants that can be
used to identify them.
BLOCK_DECREMENT
The user clicked inside the scroll bar to decrease its value.
BLOCK_INCREMENT
The user clicked inside the scroll bar to increase its value.
TRACK
The slider was dragged.
UNIT_DECREMENT
The button at the end of the scroll bar was clicked to decrease its value.
UNIT_INCREMENT
89 The button at the end of the scroll bar was clicked to increase its value.
The type of the adjustment event may be obtained by
the getAdjustmentType( ) method. It returns one of the
constants defined by AdjustmentEvent.
The general form is shown here:
int getAdjustmentType( )
The amount of the adjustment can be obtained from
the getValue( ) method, shown here:
int getValue( )
For example, when a scroll bar is manipulated, this
method returns the value represented by that change.
90
AdjustmentListener Interface
This interface defines the adjustmentValueChanged( ) method that is
invoked when an adjustment event occurs.
Its general form is shown here:
void adjustmentValueChanged(AdjustmentEvent ae)
91
Summary of Event Classes
& Listeners
92
93
94
95
96
Adapter Classes
Java provides a special feature, called an adapter class that can simplify
the creation of event handlers in certain situations.
An adapter class provides an empty implementation of all methods in an
event listener interface.
Adapter classes are useful when we want to receive and process only
some of the events that are handled by a particular event listener
interface.
We can define a new class to act as an event listener by extending one of
the adapter classes and implementing only those events in which we are
interested.
For example,
the MouseMotionAdapter class has two methods,
mouseDragged( ) and
mouseMoved( ).
97