liang,introduction to java programming,revised by dai-kaiyu 1 chapter 12 event-driven programming...
Post on 17-Dec-2015
243 Views
Preview:
TRANSCRIPT
Liang,Introduction to Java Programming,revised by Dai-kaiyu1
Chapter 12 Event-Driven Programming
Prerequisites for Part III
Chapter 11 Getting Started with GUI Programming
Chapter 8 Inheritance and Polymorphism
Chapter 13 Creating User Interfaces
Chapter 14 Applets, Images, Audio
Chapter 9 Abstract Classes and Interfaces
Chapter 12 Event-Driven Programming 找出画中真谛
— 保罗 . 塞尚
Liang,Introduction to Java Programming,revised by Dai-kaiyu2
Objectives
To explain the concept of event-driven programming (§12.2). To understand event, event source, and event classes (§12.2). To declare listener classes and write the code to handle events
(§11.3). To register listener objects in the source object (§11.3). To understand how an event is handled (§11.3). To write programs to deal with ActionEvent (§11.3). To write programs to deal with MouseEvent (§11.4). To write programs to deal with KeyEvent (§11.5). To use the Timer class to control animations (§11.6 Optional).
Liang,Introduction to Java Programming,revised by Dai-kaiyu3
Procedural vs. Event-Driven Programming Procedural programming is executed in
procedural order.
In OO GUI programming, code is executed upon activation of events.
GUIs are event driven Generate events when user interacts with GUI
e.g., moving mouse, pressing button, typing in text field, etc.
Class java.awt.AWTEvent
Liang,Introduction to Java Programming,revised by Dai-kaiyu4
Events
An event can be defined as a type of signal to the program that something has happened.
The event is generated by external user actions such as mouse movements, mouse clicks, and keystrokes, or by the operating system, such as a timer.
Liang,Introduction to Java Programming,revised by Dai-kaiyu5
Event Classes
Liang,Introduction to Java Programming,revised by Dai-kaiyu6
Event Information
An event object contains whatever properties are pertinent to the event.
You can identify the source object of the event using the getSource() instance method in the EventObject class.
The subclasses of EventObject deal with special types of events, such as button actions, window events, component events, mouse movements, and keystrokes. Table 12.1 lists external user actions, source objects, and event types generated.
Liang,Introduction to Java Programming,revised by Dai-kaiyu7
Selected User Actions
Source Event TypeUser Action Object Generated
Click a button JButton ActionEvent
Click a check box JCheckBox ItemEvent, ActionEvent
Click a radio button JRadioButton ItemEvent, ActionEvent
Press return on a text field JTextField ActionEvent
Select a new item JComboBox ItemEvent, ActionEvent
Window opened, closed, etc. Window WindowEvent
Mouse pressed, released, etc. Component MouseEvent
Key released, pressed, etc. Component KeyEvent
Liang,Introduction to Java Programming,revised by Dai-kaiyu8
Event-Handling Model
Event-handling model Three parts
Event source• GUI component with which user interacts
Event object• Encapsulates information about event that occurred
Event listener• Receives event object when notified, then responds
Programmer must perform two tasks Register event listener for event source Implement event-handling method (event handler)
Liang,Introduction to Java Programming,revised by Dai-kaiyu9
The Delegation Model
source: SourceClass
+addXListener(XListener listener)
listener: ListenerClass User Action
Trigger an event
XListener +handler(XEvent event)
Internal function of the source object
event: XEvent listener1 listener2 … listenern
+handler(XEvent
Register by invoking source.addXListener(listener);
Keep it a list
Invoke listener1.handler(event) listener2.handler(event) … listenern.handler(event)
Liang,Introduction to Java Programming,revised by Dai-kaiyu10
How Event Handling Works
Two open questions from How did event handler get registered?
Answer:• Through component’s method addActionListener
How does component know to call actionPerformed?Answer:
• Event is dispatched only to listeners of appropriate type
• Each event type has corresponding event-listener interface Event ID specifies event type that occurred
For example: MouseEvent event’s ID spedify which method of the seven events will be handler
Liang,Introduction to Java Programming,revised by Dai-kaiyu11
The Delegation Model: Example
source: JButton
+addActionListener(ActionListener listener)
listener: ListenerClass
ActionListener
+actionPerformed(ActionEvent event)
Register by invoking source.addActionListener(listener);
ListenerClass listener = new ListenerClass();
JButton jbt = new JButton("OK");
jbt.addActionListener(listener);
Liang,Introduction to Java Programming,revised by Dai-kaiyu12
Event-listener interfaces of package java.awt.event
java.util.EventListener
ActionListener
ComponentListener
AdjustmentListener
ContainerListener
MouseListener
TextListener
ItemListener
FocusListener
KeyListener
MouseMotionListener
WindowListener
C lass name
Key
Interface name
Liang,Introduction to Java Programming,revised by Dai-kaiyu13
Selected Event Handlers
Event Class Listener Interface Listener Methods (Handlers)ActionEvent ActionListener actionPerformed(ActionEvent)ItemEvent ItemListener itemStateChanged(ItemEvent)WindowEvent WindowListener windowClosing(WindowEvent)
windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)
ContainerEvent ContainerListener componentAdded(ContainerEvent)componentRemoved(ContainerEvent)
MouseEvent MouseListener mousePressed(MouseEvent)mouseReleased(MouseEvent)
mouseClicked(MouseEvent) mouseExited(MouseEvent) mouseEntered(MouseEvent)KeyEvent KeyListener keyPressed(KeyEvent)
keyReleased(KeyEvent) keyTypeed(KeyEvent)
Liang,Introduction to Java Programming,revised by Dai-kaiyu14
java.awt.event.ActionEvent
java.awt.event.ActionEvent
+getActionCommand(): String
+getModifier(): int
+getWhen(): long
Returns the command string associated with this action. For a button, its text is the command string.
Returns the modifier keys held down during this action event.
Returns the timestamp when this event occurred. The time is the number of milliseconds since January 1, 1970, 00:00:00 GMT.
java.util.EventObject
+getSource(): Object
Returns the object on which the event initially occurred.
java.awt.event.AWTEvent
Liang,Introduction to Java Programming,revised by Dai-kaiyu15
Example 12.1Handling Simple Action Events
Objective: Display two buttons OK and Cancel in the window. A message is displayed on the console to indicate which button is clicked, when a button is clicked.
TestActionEventTestActionEvent
RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu16
Example 12.2Handling Window Events
TestWindowEventTestWindowEvent RunRun
Objective: Demonstrate handling the window events. Any subclass of the Window class can generate the following window events: window opened, closing, closed, activated, deactivated, iconified, and deiconified. This program creates a frame, listens to the window events, and displays a message to indicate the occurring event.
Liang,Introduction to Java Programming,revised by Dai-kaiyu17
Example 12.3 Multiple Listeners for a Single Source
TestMultipleListenerTestMultipleListener RunRun
Objective: This example modifies Example 12.1 to add a new listener for each button. The two buttons OK and Cancel use the frame class as the listener. This example creates a new listener class as an additional listener for the action events on the buttons. When a button is clicked, both listeners respond to the action event.
Liang,Introduction to Java Programming,revised by Dai-kaiyu18
MouseEvent
java.awt.event.MouseEvent
+getButton(): int
+getClickCount(): int
+getPoint(): java.awt.Point
+getX(): int
+getY(): int
Indicates which mouse button has been clicked.
Returns the number of mouse clicks associated with this event.
Returns a Point object containing the x and y coordinates.
Returns the x-coordinate of the mouse point.
Returns the y-coordinate of the mouse point.
java.awt.event.InputEvent
+getWhen(): long
+isAltDown(): boolean
+isControlDown(): boolean
+isMetaDown(): boolean
+isShiftDown(): boolean
Returns the timestamp when this event occurred.
Returns whether or not the Alt modifier is down on this event.
Returns whether or not the Control modifier is down on this event.
Returns whether or not the Meta modifier is down on this event
Returns whether or not the Shift modifier is down on this event.
Liang,Introduction to Java Programming,revised by Dai-kaiyu19
Handling Mouse Events
Java provides two listener interfaces, MouseListener and MouseMotionListener, to handle mouse events.
The MouseListener listens for actions such as when the mouse is pressed, released, entered, exited, or clicked.
The MouseMotionListener listens foractions such as dragging or moving themouse.
Liang,Introduction to Java Programming,revised by Dai-kaiyu20
Handling Mouse Events
java.awt.event.MouseListener
+mousePressed(e: MouseEvent): void
+mouseReleased(e: MouseEvent): void
+mouseClicked(e: MouseEvent): void
+mouseEntered(e: MouseEvent): void
+mouseExited(e: MouseEvent): void
Invoked when the mouse button has been pressed on the source component.
Invoked when the mouse button has been released on the source component.
Invoked when the mouse button has been clicked (pressed and released) on the source component.
Invoked when the mouse enters the source component.
Invoked when the mouse exits the source component.
java.awt.event.MouseMotionListener
+mouseDragged(e: MouseEvent): void
+mouseMoved(e: MouseEvent): void
Invoked when a mouse button is moved with a button pressed.
Invoked when a mouse button is moved without a button pressed.
Liang,Introduction to Java Programming,revised by Dai-kaiyu21
Example 12.4 Moving Message Using Mouse
Objective: Create a program to display a message in a panel. You can use the mouse to move the message. The message moves as the mouse drags and is always displayed at the mouse point.
MoveMessageDemoMoveMessageDemo RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu22
Example 12.5 Handling Complex Mouse Events
Objective: Create a program for drawing using a mouse. Draw by dragging with the left mouse button pressed; erase by dragging with the right button pressed.
ScribbleDemoScribbleDemo RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu23
Adapter Classes
Adapter class Implements interface Provides default implementation of each interface
method Used when all methods in interface is not needed
Liang,Introduction to Java Programming,revised by Dai-kaiyu24
Event adapter classes and the interfaces they implement.
Event adapter class Implements interface ComponentAdapter ComponentListener ContainerAdapter ContainerListener FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener WindowAdapter WindowListener Fig. 12.18 Event adapter classes and the interfaces they implement.
Liang,Introduction to Java Programming,revised by Dai-kaiyu
25
1 // Fig. 12.19: Painter.java 2 // Using class MouseMotionAdapter. 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class Painter extends JFrame {12 private int xValue = -10, yValue = -10;13 14 // set up GUI and register mouse event handler15 public Painter()16 {17 super( "A simple paint program" );18 19 // create a label and place it in SOUTH of BorderLayout20 getContentPane().add(21 new Label( "Drag the mouse to draw" ),22 BorderLayout.SOUTH );23 24 addMouseMotionListener(25 26 // anonymous inner class27 new MouseMotionAdapter() {28 29 // store drag coordinates and repaint30 public void mouseDragged( MouseEvent event )31 {32 xValue = event.getX();33 yValue = event.getY();34 repaint();35 }
Register MouseMotionListener to listen for window’s mouse-motion events
Override method mouseDragged, but not method mouseMoved
Store coordinates where mouse was dragged, then repaint JFrame
Liang,Introduction to Java Programming,revised by Dai-kaiyu
26
36 37 } // end anonymous inner class38 39 ); // end call to addMouseMotionListener40 41 setSize( 300, 150 ); 42 setVisible( true ); 43 }44 45 // draw oval in a 4-by-4 bounding box at the specified46 // location on the window47 public void paint( Graphics g )48 {49 // we purposely did not call super.paint( g ) here to 50 // prevent repainting51 52 g.fillOval( xValue, yValue, 4, 4 );53 }54 55 // execute application56 public static void main( String args[] )57 {58 Painter application = new Painter();59 60 application.addWindowListener(61 62 // adapter to handle only windowClosing event63 new WindowAdapter() {64 65 public void windowClosing( WindowEvent event )66 {67 System.exit( 0 );68 }69
Draw circle of diameter 4 where user dragged cursor
super.paint( g ) will clear the background of the window. Then will not keep the previous voals.
Showcase
Liang,Introduction to Java Programming,revised by Dai-kaiyu
27
70 } // end anonymous inner class71 72 ); // end call to addWindowListener73 }74 75 } // end class Painter
Painter.java
Liang,Introduction to Java Programming,revised by Dai-kaiyu28
Handling Keyboard Events
keyPressed(KeyEvent e)
Called when a key is pressed.
keyReleased(KeyEvent e)
Called when a key is released.
keyTyped(KeyEvent e) Called when a key is pressed and thenreleased.invoked when a Unicode character is entered. If the key dosen’t has one (eg modifier key), the keyTyped handler will not be invoked.
To process a keyboard event, use the following handlers in the KeyListener interface:
Liang,Introduction to Java Programming,revised by Dai-kaiyu29
The KeyEvent Class
Methods:
getKeyChar() method
getKeyCode() method
Keys:Home VK_HOMEEnd VK_EndPage Up VK_PGUPPage Down VK_PGDNetc...
Liang,Introduction to Java Programming,revised by Dai-kaiyu30
The KeyEvent Class, cont.
java.awt.event.KeyEvent
+getKeyChar(): char
+getKeyCode(): int
Returns the character associated with the key in this event.
Returns the integer keyCode associated with the key in this event.
java.awt.event.InputEvent
Liang,Introduction to Java Programming,revised by Dai-kaiyu31
Example 12.6Keyboard Events Demo
Objective: Display a user-input character. The user can also move the character up, down, left, and right using the arrow keys.
KeyboardEventDemoKeyboardEventDemo RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu32
The Timer Class
Not all source objects are GUI components. The javax.swing.Timer class
is a source component that fires an ActionEvent at a predefined rate.
Optional
javax.swing.Timer
+Timer(delay: int, listener: ActionListener)
+addActionListener(listener: ActionListener): void
+start(): void
+stop(): void
+setDelay(delay: int): void
Creates a Timer with a specified delay in milliseconds and an ActionListener.
Adds an ActionListener to the timer.
Starts this timer.
Stops this timer.
Sets a new delay value for this timer.
The Timer class can be used to control animations. For example, you
can use it to display a moving message.
AnimationDemoAnimationDemo RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu33
Clock Animation
In Section 11.12, you drew a StillClock to show the current
time. The clock does not tick after it is displayed. What can
you do to make the clock display a new current time every
second? The key to making the clock tick is to repaint it
every second with a new current time. You can use a timer
to control how to repaint the clock.
ClockAnimationClockAnimation RunRun
top related