Event Handling
Event Handling
Event Handling
Unit III
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.
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 ●
ActionListener
selected, list-item is double clicked
●
MouseEvent ●
generated when mouse is dragged, moved, clicked, ●
MouseListener
pressed or released and also when it enters or exit a
component
●
KeyEvent ●
generated when input is received from keyboard ●
KeyListener
●
ItemEvent ●
generated when check-box or list item is clicked ●
ItemListener
●
TextEvent ●
generated when value of textarea or textfield is ●
TextListener
changed
●
MouseWheelEv ●
generated when mouse wheel is moved ●
MouseWheelListen
ent er
●
WindowEvent ●
generated when window is activated, deactivated, ●
WindowListener
deiconified, iconified, opened or closed
●
ComponentEv ●
generated when component is hidden, moved, ●
ComponentEventL
resized or set visible istener
ent
●
ContainerEve ●
generated when component is added or removed ●
ContainerListener
nt from container
●
AdjustmentEv ●
generated when scroll bar is manipulated ●
AdjustmentListene
r
ent
●
FocusEvent ●
generated when component gains or loses keyboard ●
FocusListener
focus 21
• Steps to handle events:
– Implement appropriate interface in the class.
– Register the component with the listener.
•
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){}
public void addItemListener(ItemListener a){} 23
ActionEvent
25
Constructor-2
public
ActionEvent(Object source,int id,String command,long when,
int modifiers)
• int getModifiers()
– Returns the modifier keys held down during this action
event.
–
• String paramString()
– Returns a parameter string identifying this action
27
event.
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)
•
– Constructs a ContainerEvent object.
–
Parameters:
– source - the Component object (container) that
originated the event
–
– id - an integer indicating the type of event
–
– child - the component that was added or removed
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.
–
• public Component getChild()
– Returns the component that was affected by
the event.
– Returns the Component object that was added
or removed.
40
ContainerListener interface
– The listener interface for receiving container
events.
–
• void componentAdded(ContainerEvent e)
– Invoked when a component has been added to
the container.
–
• void componentRemoved (ContainerEvent e)
– Invoked when a component has been removed
from 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.
–
• public FocusEvent(Component source,int id)
– source - the Component that originated the event
– id - an integer indicating the type of event
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
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
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.
–
• Here are some others:
– VK_ENTER, VK_ESCAPE, VK_CANCEL, VK_UP,
VK_DOWN, VK_LEFT, VK_RIGHT,
VK_PAGE_DOWN,VK_PAGE_UP, VK_SHIFT,
VK_ALT, VK_CONTROL
• The VK constants specify virtual key codes and
are independent of any modifiers, such as
control, shift, or alt. 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.
•
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.
•
• public TextEvent(Object source,int id)
– Constructs a TextEvent object.
– Parameters:
– source - the (TextComponent) object that
originated the event
– id - an integer that identifies the event type
69
TextListener interface
70
WindowEvent class
• A low-level event indicates that a window has
changed its status.
•
• This event is generated by a Window object
when it is opened, closed, activated,
deactivated, iconified, or deiconified, or when
focus is transferred into or out of the Window.
•
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
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:
80
MouseListener Interface
•
• 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.
•
• If an application requires the detection of both mouse events and
mouse-motion events, use the MouseInputAdapter class.
•
• It implements the MouseInputListener a convenient interface that
implements both the MouseListener and MouseMotionListener
interfaces.
83
Methods of MouseMotionListener Interface
●
Method ●
Purpose
● ●
Called in response to the user moving the
●
mouseDragged(MouseEve mouse while holding a mouse button down.
nt) This event is fired by the component that fired
the most recent mouse-pressed event, even if
the cursor is no longer over that component.
●
● ●
Called in response to the user moving the
●
mouse with no mouse buttons pressed. This
●
mouseMoved(MouseEvent event is fired by the component that's currently
) under the cursor.
84
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
85
public void paint(Graphics g) // draw message to screen
{
super.paint(g);
86
repaint();
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
– The button at the end of the scroll bar was clicked to increase its value.
89
• 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