1 / 33

Chapter 12 Event-Driven Programming

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

joanne
Download Presentation

Chapter 12 Event-Driven Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 12 Event-Driven Programming 找出画中真谛 — 保罗.塞尚 Liang,Introduction to Java Programming,revised by Dai-kaiyu

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

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

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

  5. Event Classes Liang,Introduction to Java Programming,revised by Dai-kaiyu

  6. 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 EventObjectclass. • 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-kaiyu

  7. Selected User Actions Source Event TypeUser Action Object Generated Click a button JButtonActionEvent Click a check box JCheckBoxItemEvent, ActionEvent Click a radio button JRadioButtonItemEvent, ActionEvent Press return on a text field JTextFieldActionEvent Select a new item JComboBoxItemEvent, ActionEvent Window opened, closed, etc. WindowWindowEvent Mouse pressed, released, etc. ComponentMouseEvent Key released, pressed, etc. ComponentKeyEvent Liang,Introduction to Java Programming,revised by Dai-kaiyu

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

  9. The Delegation Model Liang,Introduction to Java Programming,revised by Dai-kaiyu

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

  11. The Delegation Model: Example ListenerClass listener = new ListenerClass(); JButton jbt = new JButton("OK"); jbt.addActionListener(listener); Liang,Introduction to Java Programming,revised by Dai-kaiyu

  12. Event-listener interfaces of package java.awt.event Liang,Introduction to Java Programming,revised by Dai-kaiyu

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

  14. java.awt.event.ActionEvent Liang,Introduction to Java Programming,revised by Dai-kaiyu

  15. 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. TestActionEvent Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

  16. Example 12.2Handling Window Events • 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. TestWindowEvent Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

  17. Example 12.3 Multiple Listeners for a Single Source • 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. TestMultipleListener Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

  18. MouseEvent Liang,Introduction to Java Programming,revised by Dai-kaiyu

  19. Handling Mouse Events • Java provides two listener interfaces, MouseListener andMouseMotionListener, 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-kaiyu

  20. Handling Mouse Events Liang,Introduction to Java Programming,revised by Dai-kaiyu

  21. 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. MoveMessageDemo Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

  22. 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. ScribbleDemo Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

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

  24. Event adapter classes and the interfaces they implement. Liang,Introduction to Java Programming,revised by Dai-kaiyu

  25. 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 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 } Liang,Introduction to Java Programming,revised by Dai-kaiyu

  26. super.paint( g ) will clear the background of the window. Then will not keep the previous voals. Draw circle of diameter 4 where user dragged cursor 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 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-kaiyu

  28. Handling Keyboard Events To process a keyboard event, use the following handlers in the KeyListener interface: • 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. Liang,Introduction to Java Programming,revised by Dai-kaiyu

  29. The KeyEvent Class • Methods: getKeyChar() method getKeyCode() method • Keys: Home VK_HOME End VK_End Page Up VK_PGUP Page Down VK_PGDN etc... Liang,Introduction to Java Programming,revised by Dai-kaiyu

  30. The KeyEvent Class, cont. Liang,Introduction to Java Programming,revised by Dai-kaiyu

  31. 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. KeyboardEventDemo Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

  32. Optional 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. The Timer class can be used to control animations. For example, you can use it to display a moving message. AnimationDemo Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

  33. 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. ClockAnimation Run Liang,Introduction to Java Programming,revised by Dai-kaiyu

More Related