JavaFX - Using Convenience Methods



Event handlers are simply defined as the actions that are to be occurred after an event has taken place. These event handlers can be registered in order to handle more complex events; and you can use convenience methods to register event handlers within your JavaFX application. Event handlers can be created and registered in order to respond to events like mouse events, keyboard events, window events etc.

Some JavaFX classes define event handler properties, which provide a way to register event handlers. Setting an event handler property to a user-defined event handler automatically registers the handler to receive the corresponding event type. The setter methods for the event handler properties are convenience methods for registering event handlers.

Using Convenience Methods for Event Handling

Some of the classes in JavaFX define event handler properties. By setting the values to these properties using their respective setter methods, you can register to an event handler. These methods are known as convenience methods.

Most of these methods exist in the classes like Node, Scene, Window, etc., and they are available to all their sub classes. Following table describes various convenience methods that can be used on different events:

User Action Event Type EventHandler Properties
Pressing, releasing, or typing a key on keyboard. KeyEvent

onKeypressed

onKeyReleased

onKeyTyped

Moving, Clicking, or dragging the mouse. MouseEvent

onMouseClicked

onMouseMoved

onMousePressed

onMouseReleased

onMouseEntered

onMouseExited

Pressing, Dragging, and Releasing of the mouse button. MouseDragEvent

onMouseDragged

onMouseDragEntered

onMouseDragExited

onMouseDragged

onMouseDragOver

onMouseDragReleased

Generating, Changing, Removing or Committing input from an alternate method. InputMethodEvent onInputMethodTextChanged
Performing Drag and Drop actions supported by the platform. DragEvent

onDragDetected

onDragDone

onDragDropped

onDragEntered

onDragExited

onDragOver

Scrolling an object. ScrollEvent

onScroll

onScrollStarted

onScrollFinished

Rotating an object. RotateEvent

onRotate

onRotationFinished

onRotationStarted

Swiping an object upwards, downwards, to the right and left. SwipeEvent

onSwipeUP

onSwipeDown

onSwipeLeft

onSwipeRight

Touching an object. TouchEvent

onTouchMoved

onTouchReleased

onTouchStationary

Zooming on an object. ZoomEvent

onZoom

onZoomStarted

onZoomFinished

Requesting Context Menu. ContextMenuEvent onContextMenuRequested
Pressing a button, showing or hiding a combo box, selecting a menu item. ActionEvent
Editing an item in a list. ListView.EditEvent
Editing an item in a table. TableColumn.CellEditEvent
Editing an item in a tree. TreeView.EditEvent
Encountering an error in a media player. MediaErrorEvent
Showing or Hiding Menu. Event
Hiding a pop-up window. Event
Selecting or Closing a Tab. Event
Showing, Minimizing, or Closing a Window. WindowEvent

Syntax

Following is the format of Convenience methods used for registering event handlers:

setOnEvent-type(EventHandler<? super event-class> value)

For example, to add a mouse event listener to a button, you can use the convenience method setOnMouseClicked() as shown below.

playButton.setOnMouseClicked((new EventHandler<MouseEvent>() { 
   public void handle(MouseEvent event) { 
      System.out.println("Hello World"); 
      pathTransition.play(); 
   } 
}));

Example

The following program is an example that demonstrates the event handling in JavaFX using the convenience methods.

Save this code in a file with the name ConvenienceMethodsExample.java.

import javafx.animation.PathTransition; 
import javafx.application.Application; 
import static javafx.application.Application.launch; 
import javafx.event.EventHandler; 

import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.paint.Color; 

import javafx.scene.shape.Circle; 
import javafx.scene.shape.LineTo; 
import javafx.scene.shape.MoveTo; 
import javafx.scene.shape.Path; 
import javafx.stage.Stage; 
import javafx.util.Duration; 
         
public class ConvenienceMethodsExample extends Application { 
   @Override 
   public void start(Stage stage) {      
      //Drawing a Circle 
      Circle circle = new Circle(); 
      
      //Setting the position of the circle 
      circle.setCenterX(300.0f); 
      circle.setCenterY(135.0f); 
      
      //Setting the radius of the circle 
      circle.setRadius(25.0f);  
      
      //Setting the color of the circle 
      circle.setFill(Color.BROWN); 
      
      //Setting the stroke width of the circle 
      circle.setStrokeWidth(20);      
       
      //Creating a Path 
      Path path = new Path(); 
      
      //Moving to the staring point 
      MoveTo moveTo = new MoveTo(208, 71);               
      
      //Creating 1st line 
      LineTo line1 = new LineTo(421, 161);        
      
      //Creating 2nd line 
      LineTo line2 = new LineTo(226,232); 
      
      //Creating 3rd line 
      LineTo line3 = new LineTo(332,52);        
      
      //Creating 4th line 
      LineTo line4 = new LineTo(369, 250);        
      
      //Creating 5th line 
      LineTo line5 = new LineTo(208, 71);       
      
      //Adding all the elements to the path 
      path.getElements().add(moveTo); 
      path.getElements().addAll(line1, line2, line3, line4, line5);     
      
      //Creating the path transition 
      PathTransition pathTransition = new PathTransition(); 
      
      //Setting the duration of the transition 
      pathTransition.setDuration(Duration.millis(1000));       
      
      //Setting the node for the transition 
      pathTransition.setNode(circle); 
      
      //Setting the path for the transition 
      pathTransition.setPath(path); 
      
      //Setting the orientation of the path 
      pathTransition.setOrientation(
         PathTransition.OrientationType.ORTHOGONAL_TO_TAN GENT);
      
      //Setting the cycle count for the transition 
      pathTransition.setCycleCount(50); 
      
      //Setting auto reverse value to true 
      pathTransition.setAutoReverse(false);
      
      //Creating play button 
      Button playButton = new Button("Play"); 
      playButton.setLayoutX(300); 
      playButton.setLayoutY(250); 
       
      circle.setOnMouseClicked (new EventHandler<javafx.scene.input.MouseEvent>() { 
         @Override 
         public void handle(javafx.scene.input.MouseEvent e) { 
            System.out.println("Hello World"); 
            circle.setFill(Color.DARKSLATEBLUE);             
         } 
      });   
      playButton.setOnMouseClicked((new EventHandler<MouseEvent>() { 
         public void handle(MouseEvent event) { 
            System.out.println("Hello World");  
            pathTransition.play(); 
         } 
      })); 
       
      //Creating stop button 
      Button stopButton = new Button("stop"); 
      stopButton.setLayoutX(250); 
      stopButton.setLayoutY(250); 
      
      stopButton.setOnMouseClicked((new EventHandler<MouseEvent>() { 
         public void handle(MouseEvent event) { 
            System.out.println("Hello World"); 
            pathTransition.stop(); 
         } 
      }));
      //Creating a Group object  
      Group root = new Group(circle, playButton, stopButton); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300); 
      scene.setFill(Color.LAVENDER);  
      
      //Setting title to the Stage 
      stage.setTitle("Convenience Methods Example");  
         
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   } 
   public static void main(String args[]){ 
      launch(args); 
   } 
}

Compile and execute the saved java file from the command prompt using the following commands.

javac --module-path %PATH_TO_FX% --add-modules javafx.controls ConvenienceMethodsExample.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls ConvenienceMethodsExample

Output

On executing, the above program generates a JavaFX window as shown below. Here click on the play button to start the animation and click on the stop button to stop the animation.

Convenience Method
Advertisements