Mouse scrolling in Java FX

I want to use mouse scroll

to make the circle larger ( mouse-scroll-up

) and the circle smaller ( mouse-scroll-down

).

I have an existing code to change the radius of a circle to a smaller one already with the middle mouse button, but my question is:

How can I use mouse scrolling and mouse scrolling down to do the same?

I have googled it can be done somehow with ScrollEvent

, but I cannot figure it out very well.

+3


source to share


1 answer


Answering your question

How can I use mouse scrolling and mouse scrolling down to do the same?

  • Use ScrollListener

    on circle and use ScrollEvent reference to get DeltaY

    .
  • Build zoomfactor

    to calculate the scaling factor you want to have.
  • Apply this factor to the Scale property of your node.


Complete example

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.input.ScrollEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class ZoomInOutCircles extends Application {

    @Override
    public void start(Stage primaryStage) {
        Group root = new Group();
        Scene scene = new Scene(root, 350, 300);
        primaryStage.setTitle("Dots");
        primaryStage.setScene(scene);

        Circle circle = new Circle(175, 150, 10, Color.BLUE);
        addMouseScrolling(circle);
        root.getChildren().add(circle);

        primaryStage.show();
    }

    public void addMouseScrolling(Node node) {
        node.setOnScroll((ScrollEvent event) -> {
            // Adjust the zoom factor as per your requirement
            double zoomFactor = 1.05;
            double deltaY = event.getDeltaY();
            if (deltaY < 0){
                zoomFactor = 2.0 - zoomFactor;
            }
            node.setScaleX(node.getScaleX() * zoomFactor);
            node.setScaleY(node.getScaleY() * zoomFactor);
        });
    }
}

      

+5


source







All Articles