Sunday, October 18, 2015

Intercept a signal by an EventFilter in JavaFX 8

Here is the code:

package sample;/**
 * Created by IDEA on 30/07/15.
 */

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;


public class EvenRegistration extends Application {
    private Circle circle;
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        circle = new Circle(100, 100, 50);
        circle.setStrokeWidth(5);
        circle.setStroke(Color.CORAL);
        circle.setFill(Color.CORAL);
        HBox root = new HBox();
        root.getChildren().add(circle);
        EventHandler<MouseEvent> mh1 =
          e -> {
              circle.setStroke(Color.BLUE);
          };
        EventHandler<MouseEvent> mh2 =
          e -> circle.setFill(Color.BROWN);
        circle.addEventHandler(MouseEvent.MOUSE_CLICKED, mh1);
        circle.addEventHandler(MouseEvent.MOUSE_CLICKED, mh2);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        // scene is an ancestor of circle, so if you set up a event filter here
        // , if will not propagate further down to circle
        scene.addEventFilter(MouseEvent.MOUSE_CLICKED, mh1);
        primaryStage.show();
    }
}

0 comments: