Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mouse scrolling in Java FX

Tags:

java

javafx

I want to use mouse scroll to make circle bigger (mouse-scroll-up) and circle smaller (mouse-scroll-down).

I have existing code to change circle radius smaller already with mouse middle button, but my question would be:

How can I use mouse-scroll-up and mouse-scroll-down to do the same thing?

I have googled, it could be done somehow with ScrollEvent, but I can't understand this very well.

like image 305
Carl Custav Mäeorg Avatar asked Apr 19 '15 20:04

Carl Custav Mäeorg


People also ask

What is mouse event JavaFX?

This event occurs when mouse moves with a pressed button. It is delivered to the same node where the button has been pressed which activated a press-drag-release gesture. It is delivered regardless of the mouse being within bounds of the node.

What is a scroll pane JavaFX?

The ScrollPane allows the application to set the current, minimum, and maximum values for positioning the contents in the horizontal and vertical directions. These values are mapped proportionally onto the layoutBounds of the contained node.

What is mouse scrolling?

Also known as a "wheel mouse," when the wheel is moved back and forth, the active window is scrolled, eliminating the need to aim the pointer (cursor) at the scroll bar. Introduced in 1996, the scroll mouse is very useful for viewing long documents and Web pages, which have a vertical (portrait) orientation.


1 Answers

Answering to your question

How can I use mouse-scroll-up and mouse-scroll-down to do the same thing?

  • Use a ScrollListener on the circle and use the ScrollEvent reference to get the DeltaY.
  • Create a zoomfactor to calculate the zoom 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);
        });
    }
}
like image 144
ItachiUchiha Avatar answered Oct 21 '22 18:10

ItachiUchiha