chapter 12 event-driven programming

33
Liang,Introduction to Java Programming,revised by D ai-kaiyu 1 Chapter 12 Event-Driven Programming Prerequisites for Part III Chapter11 G etting Started w ith G U IProgram ming Chapter8 Inheritance and Polym orphism Chapter13 Creating U serInterfaces Chapter14 A pplets, Im ages,A udio Chapter9 A bstractClassesand Interfaces Chapter12 Event-D riven Program ming 找找找找找找 — 找找 . 找找

Upload: joanne

Post on 07-Jan-2016

60 views

Category:

Documents


4 download

DESCRIPTION

Chapter 12 Event-Driven Programming. 找出画中真谛 — 保罗.塞尚. 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). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 12  Event-Driven Programming

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 找出画中真谛

— 保罗 . 塞尚

Page 2: 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).

Page 3: Chapter 12  Event-Driven Programming

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

Page 4: Chapter 12  Event-Driven Programming

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.

Page 5: Chapter 12  Event-Driven Programming

Liang,Introduction to Java Programming,revised by Dai-kaiyu5

Event Classes

Page 6: Chapter 12  Event-Driven Programming

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.

Page 7: Chapter 12  Event-Driven Programming

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

Page 8: Chapter 12  Event-Driven Programming

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)

Page 9: Chapter 12  Event-Driven Programming

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)

Page 10: Chapter 12  Event-Driven Programming

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

Page 11: Chapter 12  Event-Driven Programming

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);

Page 12: Chapter 12  Event-Driven Programming

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

Page 13: Chapter 12  Event-Driven Programming

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)

Page 14: Chapter 12  Event-Driven Programming

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

Page 15: Chapter 12  Event-Driven Programming

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

Page 16: Chapter 12  Event-Driven Programming

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.

Page 17: Chapter 12  Event-Driven Programming

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.

Page 18: Chapter 12  Event-Driven Programming

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.

Page 19: Chapter 12  Event-Driven Programming

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.

Page 20: Chapter 12  Event-Driven Programming

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.

Page 21: Chapter 12  Event-Driven Programming

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

Page 22: Chapter 12  Event-Driven Programming

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

Page 23: Chapter 12  Event-Driven Programming

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

Page 24: Chapter 12  Event-Driven Programming

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.

Page 25: Chapter 12  Event-Driven Programming

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

Page 26: Chapter 12  Event-Driven Programming

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

Page 27: Chapter 12  Event-Driven Programming

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

Page 28: Chapter 12  Event-Driven Programming

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:

Page 29: Chapter 12  Event-Driven Programming

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...

Page 30: Chapter 12  Event-Driven Programming

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

Page 31: Chapter 12  Event-Driven Programming

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

Page 32: Chapter 12  Event-Driven Programming

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

Page 33: Chapter 12  Event-Driven Programming

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