event-driven programming with the java event model...6 general structure of event-driven general...
TRANSCRIPT
CPE203/CSC203Software Systems and Models
CPE203/CSC203Software Systems and Models
Event-driven Programming with the Java Event Model
Event-driven Programming with the Java Event Model
Dr Zhou SuipingOffice: N4-02-C87Phone: 6790 6263Email: [email protected]
Dr Zhou SuipingOffice: N4-02-C87Phone: 6790 6263Email: [email protected]
2
Outline Outline
�Basic concepts of event-driven programming
�General structure of event-driven programming�Event registration and handling
�Some common events in Java GUI programming�ActionEvent, WindowsEvent, MouseEvent, and KeyEvent
�How to use the Timerto control animations�This is related to Lab 1 & 2
�Basic concepts of event-driven programming
�General structure of event-driven programming�Event registration and handling
�Some common events in Java GUI programming�ActionEvent,WindowsEvent,MouseEvent, and KeyEvent
�How to use the Timerto control animations�This is related to Lab 1 & 2
3
Procedural programming Procedural programming
�Procedural programming is executed in procedural order.
1.Start off by setting its internal state.2.Read data either from the user input or
from data files. 3.Perform computation, etc.
4.Output the results.
�The sequence of operations for an application is determined by a central controlling program (e.g., a main procedure).
�Procedural programming is executed in procedural order.
1.Start off by setting its internal state.2.Read data either from the user input or
from data files. 3.Perform computation, etc.
4.Output the results.
�The sequence of operations for an application is determined by a central controlling program (e.g., a main procedure).
1. Initialize
2. Read Data
3. Process Data
4. Output Results
4
Event-driven programming Event-driven programming
�In event-driven programming, code is executed upon activation of events.�Not sequential execution: The sequence of operations for an
applicationis determined by the generation of events.�Usually, no end: wait and listen
�An event can be defined as a type of signalto the program, notifying that something is happening.�An event can be generated by external user actionssuch as mouse
movements, mouse clicks, and keystrokes, or by the operating system, such as a timer, and an error.
�In event-driven programming, code is executed upon activation of events.�Not sequential execution: The sequence of operations for an
applicationis determined by the generation of events.�Usually, no end: wait and listen
�An event can be defined as a type of signalto the program, notifying that something is happening.�An event can be generated by external user actionssuch as mouse
movements, mouse clicks, and keystrokes, or by the operating system, such as a timer, and an error.
5
Event-driven programming Event-driven programming
�Applications�Operation systems : Windows, Mac OS X,
Unix/Linux, etc.�Embedded systems : television, hand phone,
xbox, etc.�Web applications and services : online purchase,
e-commerce, etc.�GUI (Graphical User Interface) applications.
�Applications�Operation systems : Windows, Mac OS X,
Unix/Linux, etc.�Embedded systems : television, hand phone,
xbox, etc.�Web applications and services : online purchase,
e-commerce, etc.�GUI (Graphical User Interface) applications.
6
General structure of event-driven programming
General structure of event-driven programming
1.Start off by setting up its internal state, then control is handed over to the event loopprovided by the runtime.
2.Wait for the event loop todetectuser actions (translated to events). These events are handledby the program one at a time.
3.Terminate when the user performs the exitaction.
7
General structure of event-driven programming (Cont’d)
General structure of event-driven programming (Cont’d)
Handler 1
Handler 2
Event QueueDispatcher
events
…
Handler n
Source 1
Source 2
…
Source m
Event Loop
8
Windows OS: an example of event handling
Windows OS: an example of event handling
PowerPoint
IEWindows OSEvent Queue
and Dispatcher
9
Event generation Event generation
�From the user�Mouse-click on a button�Close/open a window�Paint a picture�Enter a key
Raw events
�From the operation system�Timer�Scheduling�Exception/Error
�From external hardware�USB drive�CD/DVD�Printer
10
The basic procedure event handling The basic procedure event handling
What need to be done when an event occurs?
1.Identification of the event�event source–the object where an event occurs�event type-multiple types of events may come from
the same source;�other properties-for example, time, location etc.
2.Event handling�whois going to handle to event: discovering the
event handler�how to handle the event: actions to be taken
(methods or callback functions to be executed)
11
Event handling: challenges Event handling: challenges
More than one event may occur simultaneously.For example, ringing bell, ringing phone, and crying baby when a mother is cooking at home. How to handle this “messy”scenario?
�Queuing and scheduling-what are the events and in which order they should be handled?
�Registrationand notification-who (more than one party may be interested in the same event) is going to handle a certain event?
�Handling–what are the actions to be taken to handle a certain event?
JVM greatly simplifies this procedurefor Java programmers!
12
Event handling: some concepts in Java programming
Event handling: some concepts in Java programming
�Event source(object)/type�“Where”is the event generated and with what type�Here, the “where”object is called “trigger”or“generator”
�Event registration�“Who”is interested in what event with what type�Here, the “who”object is called “listener”
�Event handling callback�What method to be executed�The method is called “handler”–part of“listener”
13
Events in Java GUI programming Events in Java GUI programming
�An event object contains various properties pertinent to the event.�All Java events is a subclass of theEventObjectclass�Subclasses of EventObjectdeal with special types of events, such as
button actions, window events, mouse movements, and keystrokes, etc.
�Obtain useful information from an event�getSource(): returns the source object for the event�getActionCommand(): returns the command string associated with
the action�getWhen():returns the timestamp when the event occurred
�An event object contains various properties pertinent to the event.�All Java events is a subclass of theEventObjectclass�Subclasses of EventObjectdeal with special types of events, such as
button actions,window events,mouse movements, and keystrokes,etc.
�Obtain useful information from an event�getSource():returns the source object for the event�getActionCommand():returns the command string associated with
the action�getWhen():returns the timestamp when the event occurred
14
User actions, events and event source
User actions, events and event source
SourceEvent TypeUser ActionObjectGenerated
Click a buttonJButtonActionEventClick a check boxJCheckBoxItemEvent, ActionEventClick a radio buttonJRadioButtonItemEvent, ActionEventPress return on a text fieldJTextFieldActionEventSelect a new itemJComboBoxItemEvent, ActionEventWindow opened, closed, etc.WindowWindowEventMouse pressed, released, etc.ComponentMouseEventMouse moved, dragged, etc.ComponentMouseMotionEventKey released, pressed, etc. ComponentKeyEvent
15
Java event model Java event model
source: SourceClass
+addXListener(XListener listener)
listener: ListenerClass UserAction
Trigger anevent
XListener
+handler(XEvent event)
Internal function of thesourceobject
event:XEventlistener1listener2…listenern
Register byinvokingsource.addXListener(listener);
Keep it a list
Invokelistener1.handler(event)listener2.handler(event)…listenern.handler(event)
Event sourceEvent listener
16
Java event model: an example Java event model: an examplesource: JButton
+addActionListener(ActionListener listener)
listener: ListenerClass
ActionListener
+actionPerformed(ActionEvent event)
Register by invokingsource.addActionListener(listener);
ActionListenerlistener = new ActionListener();
void actionPerformed(ActionEvente) {
// handle the event
}
//event registration
(new JButton("OK")).addActionListener(listener);
Event handler
OK
Event source
Event Listener
Event registration
17
Java event class, listener, and handlers Java event class, listener, and handlers
Event ClassListener InterfaceListener Methods (Handlers)
ActionEventActionListeneractionPerformed(ActionEvent)ItemEventItemListeneritemStateChanged(ItemEvent)
WindowEventWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowClosed(WindowEvent)windowIconified(WindowEvent)…
ContainerEventContainerListenercomponentAdded(ContainerEvent)componentRemoved(ContainerEvent)
MouseEventMouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseClicked(MouseEvent)…
KeyEventKeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)
18
Some common events in Java GUI programming
Some common events in Java GUI programming
�With examples, we will illustrate some common events in Java GUI programming�Events caused by user’s actions:
�Action Events (Button)�Mouse Events (Mouse)�Key Events (Keyboard)
�Internal events (from Operation System)�Action Events (Timer)
19
Handling action events:a JButtonexample
Handling action events:a JButtonexample
�Two buttons OKand Cancelin a window.�A message is displayed on the console to indicate
which button is clicked and at what time.
�Two buttons OKandCancelin a window.�A message is displayed on the console to indicate
which button is clicked and at what time. Run
public class TestActionEventextends JFrame{
// Create two buttons
private JButtonjbtOk= new JButton("OK");
private JButtonjbtCancel=new JButton("Cancel");
public TestActionEvent() {
getContentPane().setLayout(newFlowLayout());
// Add buttons to the frame
getContentPane().add(jbtOk);
getContentPane().add(jbtCancel);
// to be continued...
20
// Create a listener object
ButtonListenerbtListener= new ButtonListener();
// Register listeners
jbtOk.addActionListener(btListener);
jbtCancel.addActionListener(btListener);
}
public static void main(String[] args) {
TestActionEventframe = new TestActionEvent();
...
}
}
class ButtonListenerimplements ActionListener{
/** This method will be invoked when a button is clicked */
public void actionPerformed(ActionEvente){
System.out.println("The" + e.getActionCommand() + " button is "
+ "clicked at\n " + new java.util.Date(e.getWhen()));
}
}
Event sourceEvent listener Event registration
Event handler, part of the event listener
21
Handling action vvents: a Timer example
Handling action vvents: a Timer example
Thejavax.swing.Timerclass is a source component that automatically fires ActionEventsat a predefined rate.
javax.swing.Timer
+Timer(delay: int, listener:ActionListener)
+addActionListener(listener:ActionListener): void
+start(): void+stop(): void+setDelay(delay: int): void
Creates a Timer witha specified delay in milliseconds and anActionListener.
Adds an ActionListener to the timer.
Starts this timer.Stops this timer.Sets anew delay value for this timer.
TheTimerclass can be used to control animations. For example, you can use it to display a moving message.
Run
22
public class AnimationDemoextends JFrame{
public AnimationDemo() {
// Create a MovingMessagePanelfor displaying a moving message
MovingMessagePanelp = new MovingMessagePanel("messagemoving?");
getContentPane().add(p);
// Create a timer for the listener p
Timer timer= new Timer(100, p);
timer.start();
}
public static void main(String[] args) {
AnimationDemoframe = new AnimationDemo();
...
}
}
class MovingMessagePanelextendsJPanelimplementsActionListener{
private String message = "Welcome to Java";
private intxCoordinate= 5; private intyCoordinate= 20;
//to be continued...
23
public MovingMessagePanel(Stringmessage) {
this.message= message;
}
/** Handle ActionEvent*/
public void actionPerformed(ActionEvente){
repaint();
}
/** Paint message */
public void paintComponent(Graphicsg){
super.paintComponent(g);
if (xCoordinate> getWidth()) xCoordinate= -100;
xCoordinate+= 2;
g.drawString(message, xCoordinate, yCoordinate);
}
}
24
Handling window events: an example
Handling window events: an example
�Different window events: window opened, closing, closed, activated, deactivated, iconified, and deiconified.
�This program creates a frame, listens to the window events, and displays messages on the console to indicate events that are occurring.
�Different window events: window opened,closing,closed,activated,deactivated,iconified, and deiconified.
�This program creates a frame, listens to the window events, and displays messages on the console to indicate events that are occurring.
Run
25
public class TestWindowEventextends JFrameimplements WindowListener{
public static void main(String[] args) {
TestWindowEventframe = new TestWindowEvent();
...
}
public TestWindowEvent() {
addWindowListener(this);// Register listener
}
/*MUST override all 7 methods:windowDeiconified, windowIconified,
windowActivated, windowDeactivated, windowOpened, windowClosing,
windowClosed*/
public void windowDeiconified(WindowEventevent) {
System.out.println("Windowdeiconified");
}
...
Event source and event listener are the same object
26
Handling mouse events: class MouseEvent
Handling mouse events: class MouseEvent
java.awt.event.MouseEvent+getButton(): int+getClickCount(): int+getPoint(): java.awt.Point+getX(): int +getY(): int
Indicates which mouse buttonhas been clicked.Returns the number of mouse clicksassociated 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 ofthe mouse point.
java.awt.event.InputEvent+getWhen(): long+isAltDown(): boolean+isControlDown(): boolean+isMetaDown(): boolean+isShiftDown(): boolean
Returns the timestamp whenthis event occurred.Returns whether or notthe Alt modifier is down onthis event.Returns whether or notthe Control modifier is down onthis event.Returns whether or notthe Meta modifier is down on this eventReturns whether or notthe Shift modifier is down on this event.
27
Handling mouse events: listeners Handling mouse events: listeners
�Java provides two listener interfaces, MouseListenerand MouseMotionListener, to handle mouse events.
�The MouseListenerlistens to actions such as when the mouse is pressed, released, clicked, entered, or exited.
�The MouseMotionListenerlistens to actions such as draggingor movingthe mouse.
�Java provides two listener interfaces, MouseListenerand MouseMotionListener, to handle mouse events.
�TheMouseListenerlistens to actions such as when the mouse is pressed,released,clicked,entered, or exited.
�TheMouseMotionListenerlistens to actions such as draggingormovingthe mouse.
28
Handling mouse events: listeners (Cont’d)
Handling mouse events: listeners (Cont’d)
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 whenthe mouse button hasbeen pressed onthesource component.
Invoked whenthe mouse button hasbeenreleased onthesource component.
Invoked whenthe mouse button hasbeen clicked(pressedandreleased)on the sourcecomponent.
Invoked whenthe mouse enters the source component.Invoked whenthe mouse exitsthe source component.
java.awt.event.MouseMotionListener
+mouseDragged(e: MouseEvent): void+mouseMoved(e: MouseEvent): void
Invoked whena mouseis moved witha button pressed.Invoked whena mouseis moved withouta button pressed.
29
Handling mouse events: a moving message example
Handling mouse events: a moving message example
Display a message in a panel. The message moves as the mouse is dragged and is always displayed at the mouse point.
Run
public class MoveMessageDemoextends JFrame{
public MoveMessageDemo() {
getContentPane().setLayout(newBorderLayout());
getContentPane().add(newMoveMessagePanel("Welcometo Java"));
}
public static void main(String[] args) {
MoveMessageDemoframe = new MoveMessageDemo();
...
}
}// to be continued...
30
class MoveMessagePanelextendsJPanelimplementsMouseMotionListener{
private String message = "Welcome to Java";
private intx = 20; private inty = 20;
public MoveMessagePanel(Strings) {
message = s;
addMouseMotionListener(this);
}
protected void paintComponent(Graphicsg){
super.paintComponent(g);
g.drawString(message, x, y);
}
public void mouseDragged(MouseEvente){
x = e.getX();
y = e.getY();
repaint();
}
public void mouseMoved(MouseEvente){}
}
31
Handling keyboard events: listener and handlers
Handling keyboard events: listener and handlers
�To process a keyboard event, use the handlers in the KeyListenerinterface:�keyPressed(KeyEvente)-called when a key is pressed�keyReleased(KeyEvente)-called when a key is
released�keyTyped(KeyEvente)-called when a key is pressed
and then released
�To process a keyboard event, use the handlers in theKeyListenerinterface:�keyPressed(KeyEvente)-called when a key is pressed�keyReleased(KeyEvente)-called when a key is
released�keyTyped(KeyEvente)-called when a key is pressed
and then released
32
Handling keyboard events: class KeyEvent
Handling keyboard events: class KeyEvent
�Methods:
getKeyChar()method
getKeyCode()method
�Methods:
getKeyChar()method
getKeyCode()method
�Keys:HomeVK_HOMEEndVK_EndPage UpVK_PGUPPage DownVK_PGDNUpVK_UPDownVK_DOWNLeftVK_LEFTRightVK_RIGHT
�Keys:HomeVK_HOMEEndVK_EndPage UpVK_PGUPPage DownVK_PGDNUpVK_UPDownVK_DOWNLeftVK_LEFTRightVK_RIGHT java.awt.event.KeyEvent
+getKeyChar(): char+getKeyCode(): int
Returnsthe characterassociated with thekey.Returns the integer keyCode associatedwith the key.
java.awt.event.InputEvent
33
Handling keyboard events:an example
Handling keyboard events:an example
Display a user-input character. The user can also move the character up, down, left, and right using the arrow keys.
Run
public class KeyboardEventDemoextends JFrame{
private KeyboardPanelkeyboardPanel=new KeyboardPanel();
public KeyboardEventDemo() {
getContentPane().add(keyboardPanel);//create UI
keyboardPanel.setFocusable(true);//set focus
}
public static void main(String[] args) {
KeyboardEventDemoframe = new KeyboardEventDemo();
...
}
}// to be continued...
34
class KeyboardPanelextendsJPanelimplementsKeyListener{
private intx=100; private inty=100; private char keyChar=‘A’;
public KeyboardPanel() { addKeyListener(this);}
protected void paintComponent(Graphicsg){
super.paintComponent(g);
g.drawString(String.valueOf(keyChar), x, y);
}
public void keyPressed(KeyEvente){
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN: y += 10; break;
case KeyEvent.VK_UP: y -= 10; break;
case KeyEvent.VK_LEFT: x -= 10; break;
case KeyEvent.VK_RIGHT: x += 10; break;
default: keyChar= e.getKeyChar();
}
repaint();
}
//empty implementation for keyReleasedandkeyTyped
}