jeudi 16 juin 2016

Difference between setOnXXX() method and addEventHandler() JavaFx

I'm trying to learn JavaFX event handling. I found that we can register event by two ways.

One is convenience method like setOnAction(EventHandler), setOnMouseClicked(EventHandler)

The second is by using addEventHandler(MouseEvent.MOUSE_CLICKED, EventHandler)

But I'm confused what is the difference between them? how decide which one will be suitable?

I have tested and registered two event handler using both methods and both are working fine.

Button btn = new Button("Click Me One!");
    btn.setOnMouseEntered(new EventHandler<MouseEvent>(){
        @Override
        public void handle(MouseEvent e){
            System.out.println("Mouse Entered on Click Me One");
        }
    });

    btn.setOnMouseExited(new EventHandler<MouseEvent>(){
        @Override
        public void handle(MouseEvent e){
            System.out.println("Mouse Exited from Click Me One");
        }
    });


    Button btn2 = new Button("Click Me Two!");
    btn2.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>(){
        @Override
        public void handle(MouseEvent e){
            System.out.println("Mouse Entered on Click Me Two");
        }
    });
    btn2.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>(){
        @Override
        public void handle(MouseEvent e){
            System.out.println("Mouse Exited from Click Me Two");
        }
    });

Here is the output after checking.

Mouse Entered on Click Me One
Mouse Exited from Click Me One
Mouse Entered on Click Me Two
Mouse Exited from Click Me Two

I also checked by defining event handler.

Button btn2 = new Button("Click Me Two!");
        // Define an event handler
        EventHandler<InputEvent> handler = new EventHandler<InputEvent>() {
            public void handle(InputEvent event) {
                System.out.println("Handling event " + event.getEventType()); 

            }
        };
        btn2.addEventHandler(MouseEvent.MOUSE_ENTERED, handler);
        btn2.addEventHandler(MouseEvent.MOUSE_EXITED, handler);

        btn2.setOnMouseEntered(handler);
        btn2.setOnMouseExited(handler);

Output:

Handling event MOUSE_ENTERED
Handling event MOUSE_ENTERED
Handling event MOUSE_EXITED
Handling event MOUSE_EXITED

Aucun commentaire:

Enregistrer un commentaire