Draw a shape with a different color (JavaFX)

profilerichardxmercado
CSC255_JavaFX_event.pdf

JAVAFX - EVENT-DRIVEN PROGRAMMING

PROFESSOR SYLVIA YEUNG

1

MOTIVATIONS

SUPPOSE YOU WANT TO WRITE A GUI

PROGRAM THAT LETS THE USER ENTER A

LOAN AMOUNT, ANNUAL INTEREST

RATE, AND NUMBER OF YEARS AND

CLICK THE COMPUTE PAYMENT BUTTON

TO OBTAIN THE MONTHLY PAYMENT

AND TOTAL PAYMENT. HOW DO YOU

ACCOMPLISH THE TASK? YOU HAVE TO

USE EVENT-DRIVEN PROGRAMMING TO

WRITE THE CODE TO RESPOND TO THE

BUTTON-CLICKING EVENT.

2

PROCEDURAL VS. EVENT-DRIVEN PROGRAMMING

 PROCEDURAL PROGRAMMING IS EXECUTED IN PROCEDURAL ORDER.

 IN EVENT-DRIVEN PROGRAMMING, CODE IS EXECUTED UPON ACTIVATION

OF EVENTS.

3

SAY HELLO

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, OR KEYSTROKES.

5

EVENT CLASSES

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

THE SUBCLASSES OF EVENTOBJECT DEAL WITH SPECIAL TYPES OF EVENTS,

SUCH AS BUTTON ACTIONS, WINDOW EVENTS, MOUSE MOVEMENTS, AND

KEYSTROKES.

TABLE 1 LISTS EXTERNAL USER ACTIONS, SOURCE OBJECTS, AND EVENT TYPES

GENERATED.

7

TABLE 1: SELECTED USER ACTIONS AND HANDLERS

8

9

HANDLING GUI EVENTS

SOURCE OBJECT (E.G., BUTTON)

LISTENER OBJECT CONTAINS A METHOD FOR

PROCESSING THE EVENT.

9

THE DELEGATION MODEL

10

THE DELEGATION MODEL: EXAMPLE

11

Button btOK = new Button("OK");

OKHandlerClass handler = new OKHandlerClass();

btOK.setOnAction(handler);//register

Source object listener object

class OKHandlerClass implements EventHandler<ActionEvent> {

@Override

public void handle(ActionEvent e) {

System.out.println("OK button clicked");

}

}

INNER CLASS

12

Button btn = new Button(“Say ‘Hello World’");

SayHelloEvent handler = new SayHelloEvent();

btn.setOnAction(handler);//register

TASTE OF EVENT-DRIVEN PROGRAMMING

THE EXAMPLE DISPLAYS A BUTTON IN THE FRAME. A MESSAGE IS DISPLAYED ON THE CONSOLE WHEN A BUTTON IS CLICKED.

13

14

TRACE EXECUTION

14

public class HandleEvent extends Application {

public void start(Stage primaryStage) {

OKHandlerClass handler1 = new OKHandlerClass();

btOK.setOnAction(handler1);

CancelHandlerClass handler2 = new CancelHandlerClass();

btCancel.setOnAction(handler2);

primaryStage.show(); // Display the stage

}

}

class OKHandlerClass implements EventHandler<ActionEvent> {

@Override

public void handle(ActionEvent e) {

System.out.println("OK button clicked");

}

}

1. Start from the

main method to

create a window and

display it

animation

15

TRACE EXECUTION

15

public class HandleEvent extends Application {

public void start(Stage primaryStage) {

OKHandlerClass handler1 = new OKHandlerClass();

btOK.setOnAction(handler1);

CancelHandlerClass handler2 = new CancelHandlerClass();

btCancel.setOnAction(handler2);

primaryStage.show(); // Display the stage

}

}

class OKHandlerClass implements EventHandler<ActionEvent> {

@Override

public void handle(ActionEvent e) {

System.out.println("OK button clicked");

}

}

animation

2. Click OK

16

TRACE EXECUTION

16

public class HandleEvent extends Application {

public void start(Stage primaryStage) {

OKHandlerClass handler1 = new OKHandlerClass();

btOK.setOnAction(handler1);

CancelHandlerClass handler2 = new CancelHandlerClass();

btCancel.setOnAction(handler2);

primaryStage.show(); // Display the stage

}

}

class OKHandlerClass implements EventHandler<ActionEvent> {

@Override

public void handle(ActionEvent e) {

System.out.println("OK button clicked");

}

}

animation

3. The JVM invokes

the listener’s handle

method

INNER CLASS

LISTENER

17

Two source objects and

two listener objects within

two Inner classes

INNER CLASS LISTENERS

A LISTENER CLASS IS DESIGNED SPECIFICALLY

TO CREATE A LISTENER OBJECT FOR A GUI

COMPONENT (E.G., A BUTTON). IT WILL NOT

BE SHARED BY OTHER APPLICATIONS. SO, IT

IS APPROPRIATE TO DEFINE THE LISTENER

CLASS INSIDE THE FRAME CLASS AS AN

INNER CLASS.

18

INNER CLASSES

INNER CLASS: A CLASS IS A MEMBER OF ANOTHER

CLASS.

ADVANTAGES: IN SOME APPLICATIONS, YOU CAN

USE AN INNER CLASS TO MAKE PROGRAMS SIMPLE.

AN INNER CLASS CAN REFERENCE THE DATA AND

METHODS DEFINED IN THE OUTER CLASS IN WHICH IT

NESTS, SO YOU DO NOT NEED TO PASS THE

REFERENCE OF THE OUTER CLASS TO THE

CONSTRUCTOR OF THE INNER CLASS.

19

INNER CLASSES, CONT.

20

INNER CLASSES (CONT.)

INNER CLASSES CAN MAKE PROGRAMS SIMPLE AND CONCISE.

AN INNER CLASS SUPPORTS THE WORK OF ITS CONTAINING OUTER

CLASS AND IS COMPILED INTO A CLASS NAMED

OUTERCLASSNAME$INNERCLASSNAME.CLASS. FOR EXAMPLE, THE

INNER CLASS INNERCLASS IN OUTERCLASS IS COMPILED INTO

OUTERCLASS$INNERCLASS.CLASS.

21

INNER CLASSES (CONT.)

AN INNER CLASS CAN BE DECLARED PUBLIC, PROTECTED, OR

PRIVATE SUBJECT TO THE SAME VISIBILITY RULES APPLIED TO A

MEMBER OF THE CLASS.

AN INNER CLASS CAN BE DECLARED STATIC.

A STATIC INNER CLASS CAN BE ACCESSED USING THE OUTER

CLASS NAME. A STATIC INNER CLASS CANNOT ACCESS NONSTATIC

MEMBERS OF THE OUTER CLASS

22

23

Two source objects and

ONE listener object within

one Inner classes

getSource() method  object

ANONYMOUS INNER CLASSES

AN ANONYMOUS INNER CLASS MUST ALWAYS EXTEND A

SUPERCLASS OR IMPLEMENT AN INTERFACE, BUT IT CANNOT HAVE

AN EXPLICIT EXTENDS OR IMPLEMENTS CLAUSE.

AN ANONYMOUS INNER CLASS MUST IMPLEMENT ALL THE ABSTRACT

METHODS IN THE SUPERCLASS OR IN THE INTERFACE.

AN ANONYMOUS INNER CLASS ALWAYS USES THE NO-ARG

CONSTRUCTOR FROM ITS SUPERCLASS TO CREATE AN INSTANCE. IF

AN ANONYMOUS INNER CLASS IMPLEMENTS AN INTERFACE, THE

CONSTRUCTOR IS OBJECT().

AN ANONYMOUS INNER CLASS IS COMPILED INTO A CLASS NAMED

OUTERCLASSNAME$N.CLASS. FOR EXAMPLE, IF THE OUTER CLASS

TEST HAS TWO ANONYMOUS INNER CLASSES, THESE TWO CLASSES

ARE COMPILED INTO TEST$1.CLASS AND TEST$2.CLASS.

24

ANONYMOUS INNER CLASSES (CONT.)

INNER CLASS LISTENERS CAN BE SHORTENED USING

ANONYMOUS INNER CLASSES. AN ANONYMOUS INNER

CLASS IS AN INNER CLASS WITHOUT A NAME. IT

COMBINES DECLARING AN INNER CLASS AND CREATING

AN INSTANCE OF THE CLASS IN ONE STEP. AN

ANONYMOUS INNER CLASS IS DECLARED AS FOLLOWS:

25

new SuperClassName/InterfaceName() {

// Implement or override methods in superclass or interface

// Other methods if necessary

}

ANONYMOUS INNER CLASSES (CONT.)

26

27

28

Anonymous Inner classes

Lambda Expression

29

Two source objects and

ONE listener object

NO Inner classes

SIMPLIFYING EVENT HANDING USING LAMBDA EXPRESSIONS

LAMBDA EXPRESSION IS A NEW FEATURE IN JAVA 8. LAMBDA

EXPRESSIONS CAN BE VIEWED AS AN ANONYMOUS METHOD

WITH A CONCISE SYNTAX. FOR EXAMPLE, THE FOLLOWING

CODE IN (A) CAN BE GREATLY SIMPLIFIED USING A LAMBDA

EXPRESSION IN (B) IN THREE LINES.

30

btEnlarge.setOnAction(

new EventHandler<ActionEvent>() {

@Override

public void handle(ActionEvent e) {

// Code for processing event e

}

}

});

(a) Anonymous inner class event handler

btEnlarge.setOnAction(e -> {

// Code for processing event e

});

(b) Lambda expression event handler

BASIC SYNTAX FOR A LAMBDA EXPRESSION

THE BASIC SYNTAX FOR A LAMBDA EXPRESSION IS EITHER

(TYPE1 PARAM1, TYPE2 PARAM2, ...) -> EXPRESSION

OR

(TYPE1 PARAM1, TYPE2 PARAM2, ...) -> { STATEMENTS; }

THE DATA TYPE FOR A PARAMETER MAY BE EXPLICITLY DECLARED OR IMPLICITLY

INFERRED BY THE COMPILER. THE PARENTHESES CAN BE OMITTED IF THERE IS ONLY

ONE PARAMETER WITHOUT AN EXPLICIT DATA TYPE.

31

32

sourceObj.setOnAction ((ActionEvent e ) -> {expressions; } );

THE MOUSEEVENT CLASS

33

34

35

THE KEYEVENT CLASS

36

THE KEYCODE CONSTANTS

37

38

LISTENERS FOR OBSERVABLE OBJECTS

YOU CAN ADD A LISTENER TO PROCESS A VALUE CHANGE IN AN

OBSERVABLE OBJECT.

AN INSTANCE OF OBSERVABLE IS KNOWN AS AN OBSERVABLE OBJECT,

WHICH CONTAINS THE ADDLISTENER(INVALIDATIONLISTENER

LISTENER) METHOD FOR ADDING A LISTENER.

ONCE THE VALUE IS CHANGED IN THE PROPERTY, A LISTENER IS

NOTIFIED. THE LISTENER CLASS SHOULD IMPLEMENT THE

INVALIDATIONLISTENER INTERFACE, WHICH USES THE

INVALIDATED(OBSERVABLE O) METHOD TO HANDLE THE PROPERTY

VALUE CHANGE. EVERY BINDING PROPERTY IS AN INSTANCE OF

OBSERVABLE.

39

40

The program registers the listeners for

the stack pane’s width and height

properties. When the user resizes the

window, the pane’s size is changed, so

the listeners are called to invoke the

resize() method to change the size of the

circle and rectangle