Zooming with mousewheel in JavaFX
Asked Answered
H

1

5

I'm trying to zoom with mousewheel. Zooming bigger works perfect. But when I scroll smaller, it doesn't shrinks indefinitly. That means, after the pane has reached a specific size, it doesn't go on shrinking. Here is my method:

package application;

import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.shape.SVGPath;
import javafx.scene.transform.Affine;
import javafx.stage.Stage;


public class fab extends Application {



private Stage stage;
private Pane pane;
private BorderPane borderPane;
private Scene scene;
private Affine affine = new Affine();   
private ScrollPane scrollPane;

private String coords = "M545.296,92.562c-1.399-1.758-2.823-3.852-4.732-4.777c-8.87-4.309-17.83-8.47-26.933-12.256    c-4.268-1.775-7.49-4.035-8.735-8.65c-0.269-1-0.755-2.084-1.473-2.799c-4.492-4.455-4.533-4.447,0.808-7.854    c0.698-0.445,1.567-0.624,1.73-0.685c-0.412-2.179-0.637-3.901-1.102-5.557c-0.225-0.804-0.755-1.681-1.408-2.179    c-3.211-2.419-7.021-4.264-9.629-7.193c-2.566-2.885-5.186-2.742-8.307-2.448c-1.044,0.098-2.513,0.13-3.146-0.473    c-3.672-3.55-8.731-1.82-13.031-3.321c-3.75-1.31-8.928,1.493-13.477,2.448c-0.633,0.13-1.399,0.293-1.946,0.065    c-7.797-3.284-14.378-1.281-19.689,4.859c-0.262,1.359-0.625,2.905-1.596,3.66c-3.696,2.864-7.854,5.182-11.326,8.274    c-2.424,2.158-4.981,5.01-5.708,7.984c-0.73,2.995-2.171,4.023-4.521,4.77c-2.529,0.8-4.859,1.579-4.949,4.953    c-0.024,0.841-1.562,1.55-1.885,2.497c-0.682,1.995-1.098,4.096-1.473,6.177c-0.208,1.154,0.253,2.554-0.241,3.505    c-1.758,3.415-3.888,6.638-5.699,10.024c-1.588,2.958-4.48,6.328-3.995,9.004c0.588,3.231-0.216,6.389,0.531,9.335    c1.252,4.961-1.191,8.45-3.48,12.24c-1.869,3.088-3.729,6.259-5.002,9.612c-1.122,2.966-3.428,5.826-1.616,9.531    c0.453,0.926-0.686,2.701-1.24,4.023c-0.51,1.216-1.615,2.301-1.763,3.525c-0.701,5.851-1.04,11.746-1.75,17.597    c-0.89,7.34-2.86,14.223-8.939,19.213c-6.328,5.194-12.896,5.194-18.445-0.747c-4.219-4.517-8.132-9.392-11.661-14.468    c-9.938-14.288-19.62-28.76-29.372-43.179c-0.432-0.636-0.889-1.509-0.804-2.203c0.58-4.569-2.194-7.499-5.3-9.8    c-3.297-2.444-3.929-4.765-0.877-8.192c-2.66-1.277-5.133-2.081-7.14-3.529c-2.22-1.604-4.696-3.46-5.843-5.806    c-2.012-4.109-1.791-9.27-5.969-12.407c-0.294-0.221-0.029-1.082-0.229-1.563c-0.849-2.044-1.722-4.08-2.689-6.071    c-0.632-1.306-1.999-2.493-2.068-3.786c-0.236-4.513-0.232-9.058,0.033-13.566c0.175-2.97,0.999-5.899,1.42-8.866    c0.109-0.759-0.062-1.64-0.355-2.362c-1.257-3.093-2.827-6.075-3.839-9.237c-0.563-1.771-0.253-3.823-0.338-5.749    c0.853-4.011-7.826-3.227-3.823-9.617c-1.036-0.816-2.244-1.518-3.104-2.517c-0.922-1.069-2.428-2.815-2.097-3.574    c1.774-4.047-0.979-4.562-3.631-5.496c-3.113-1.098-6.161-2.387-9.237-3.595c0.123-0.359,0.241-0.718,0.363-1.073    c-4.79,0.653-9.633,2.513-14.21-0.845c-0.608-0.445-1.669-0.844-2.281-0.616c-4.872,1.795-8.85-0.461-12.705-2.129    c-1.828,1.354-3.685,2.231-5.643,2.66c-4.386,0.967-8.817,1.713-13.231,2.554c-0.13,0.024-0.269,0.082-0.371,0.167    c-1.844,1.607-3.684,3.219-5.651,4.945c2.464,4.762,1.175,4.398-3.043,5.557c-1.277,0.351-2.501,1.179-3.542,2.036    c-0.902,0.743-1.64,1.767-2.236,2.791c-2.122,3.651-4.158,7.352-6.189,11.053c-0.069,0.126,0.212,0.485,0.379,0.693    c2.86,3.542,1.338,7.197,0.767,11.073c-0.502,3.419,0.008,7.213,1.02,10.559c0.738,2.444,3.011,4.423,5.047,7.226    c1.767-0.249,4.296,0.119,4.019,4.076c-0.123,1.746-0.114,3.533-0.494,5.226c-1.359,6.039-2.795,12.065-4.374,18.05    c-0.216,0.82-1.273,1.665-2.134,2.028c-5.333,2.24-14.647-2.677-15.667-9.042c-1.212-7.548-1.126-15.3-1.853-22.938    c-0.229-2.391-1.334-4.688-1.889-7.062c-0.261-1.126-0.681-2.978-0.155-3.395c2.607-2.068,0.579-3.639-0.379-5.137    c-2.211-3.439-2.093-3.88,2.456-5.153c-1.991-2.913-3.913-5.724-5.863-8.576c1.118-0.958,1.889-1.616,3.072-2.624    c-2.925-2.395-5.765-4.455-8.25-6.875c-1.105-1.077-1.501-2.885-2.219-4.357c-1.861-3.962-7.932-2.767-9.506-7.923    c-0.127-0.408-1.188-0.792-1.783-0.755c-2.26,0.147-4.557,0.277-6.752,0.783c-3.337,0.767-6.34,1.828-10.037,0.392    c-5.288-2.052-10.955-3.19-16.516-4.463c-3.133-0.718-5.826,0.114-7.466,3.333c-0.42,0.82-1.62,1.583-2.566,1.738    c-5.426,0.881-7.279,5.243-9.42,8.829c1.057,1.812,1.914,3.285,3.207,5.508c-8.735,0.661-14.782,4.076-17.748,10.008    c0.886,2.122,2.387,4.108,1.918,4.859c-3.599,5.753-2.175,11.632-1.167,17.548c3.786,0.363,3.219,0.73,5.324,4.002    c2.02,3.138,1.22,8.503,7.821,9.115c-2.436,8.168-4.443,16.022-7.152,23.627c-2.313,6.491-6.006,12.517-8.05,19.07    c-2.109,6.769-5.671,12.333-10.355,17.425c-5.397,5.867-11.191,11.453-15.957,17.805c-9.988,13.317-17.777,27.883-22.473,43.979    c-1.232,4.223-2.105,8.748-4.292,12.456c-10.343,17.52-18.76,35.615-22.122,55.986c-1.522,9.208-0.828,17.577,3.386,25.635    c2.428,4.639,2.452,8.895-0.053,13.354c-1.049,1.865-3.24,4.387-2.689,5.627c2.546,5.748-2.395,9.347-3.264,14.019    c-0.412,2.211-0.89,4.41-1.236,6.104c3.606-1.803,6.989-3.419,10.294-5.186c1.599-0.853,3.631-1.636,4.484-3.044    c6.785-11.228,8.894-17.784-0.065-29.331c-3.207-4.137-4.533-8.597-4.806-13.717c-0.433-8.221,1.171-16.104,3.729-23.774    c1.685-5.055,4.084-9.886,6.373-14.72c0.408-0.861,1.84-1.236,2.799-1.836c0.343,0.947,0.926,1.877,0.983,2.84    c0.351,5.793,0.481,11.6,0.897,17.389c0.22,3.06,0.694,6.124,1.342,9.123c2.371,11.004,5.002,21.971,2.061,33.171    c7.046,3.202-0.4,7.005,0.881,10.347c4.341,0.897,4.415,1.15,2.46,5.129c-2.187,4.446-4.524,8.854-6.247,13.479    c-1.195,3.211-3.092,6.822,0.367,10.095c0.375,0.354,0.4,1.57,0.09,2.097c-4.557,7.744,4.92,12.982,3.558,20.127    c-0.013,0.073,0.167,0.216,0.281,0.277c3.88,2.154,2.701,6.748,4.753,9.902c2.215,3.398,4.329,7.226,2.848,11.782    c-0.171,0.519,1.098,1.437,1.562,2.244c0.845,1.478,1.869,2.934,2.326,4.541c2.828,9.911,2.84,19.604-2.366,28.915    c-1.493,2.677-2.505,5.618-3.791,8.413c-2.701,5.88-2.586,11.665,0.526,17.349c1.808,3.296,3.831,6.479,5.476,9.853    c0.897,1.853,1.758,4.015,1.681,6.002c-0.481,12.105,1.91,23.889,4.541,35.504c2.02,8.903,2.154,17.405-0.09,26.104    c-1.734,6.72,0.233,10.542,7.075,11.848c12.709,2.424,25.529,5.312,38.173-0.216c0.706-7.267-0.017-8.964-5.838-12.465    c-9.731-5.854-17.777-13.374-21.641-24.215c-2.583-7.241-4.382-14.847-5.691-22.432c-0.951-5.528-1.62-11.521-0.486-16.903    c2.31-10.95,3.134-21.587,0.041-32.493c-0.759-2.672-0.094-5.838,0.277-8.727c0.73-5.68,5.186-8.731,8.751-12.607    c5.166-5.622,9.405-12.093,14.142-18.123c0.632-0.809,2.007-1.738,2.774-1.547c0.836,0.208,1.828,1.596,1.954,2.57    c0.722,5.741,1.702,11.514,1.657,17.271c-0.057,7.667-1.004,15.325-1.501,22.991c-0.665,10.236,1.595,20.062,4.933,29.588    c3.329,9.494,5.569,18.968,4.969,29.177c-0.542,9.208,0.004,18.478-0.191,27.715c-0.069,3.248,1.485,5.65,3.958,6.487    c11.538,3.904,23.003,9.27,35.643,4.296c2.064-0.812,4.092-2.219,6.194-2.325c3.692-0.188,3.884-2.358,2.811-4.59    c-0.849-1.771-2.611-3.583-4.407-4.346c-12.656-5.356-21.195-15.019-26.744-27.001c-2.966-6.41-3.835-13.852-5.227-20.91    c-1.856-9.417-1.926-18.683,0.959-28.177c1.607-5.283,2.134-11.864,0.445-16.969c-2.979-8.996-2.313-16.887,2.819-24.369    c3.268-4.766,7.45-8.898,11.114-13.403c6.455-7.936,13.17-15.81,15.496-26.1c1.069-4.721,3.032-8.638,6.752-11.559    c5.01-3.934,7.989-8.854,9.013-15.194c0.689-4.275,1.628-4.524,5.565-2.75c2.114-2.093,4.357-4.075,6.304-6.315    c2.085-2.399,3.75-3.093,6.141-0.232c4.006,4.798,9.086,7.507,15.614,6.989c0.95-0.078,2.583,0.681,2.88,1.452    c1.249,3.215,3.721,3.378,6.561,3.432c2.795,0.053,6.414-0.515,8.213,0.967c4.7,3.867,10.347,3.357,15.553,4.483    c3.08,0.665,3.468,1.954,3.203,4.333c-0.126,1.155-0.494,2.285-0.677,3.109c3.219,0.493,5.014,1.534,4.043,4.998    c-0.792,2.819-1.702,5.646-2.044,8.535c-0.2,1.693,0.49,3.541,0.987,5.255c0.457,1.566,1.253,3.027,1.799,4.569    c1.359,3.84,2.501,7.765,4.052,11.519c0.975,2.358,2.028,5.512,3.954,6.454c2.803,1.375,3.158,3.13,3.488,5.614    c0.22,1.648,0.693,4.305,1.677,4.631c3.574,1.188,3.876,4.524,5.578,6.928c1.057,1.489,2.015,3.525,3.5,4.137    c2.525,1.041,2.962,2.575,3.097,4.962c0.314,5.495,0.322,11.118,1.55,16.434c4.472,19.355,4.594,38.65,0.894,58.124    c-1.526,8.025-2.709,16.177-3.154,24.321c-0.302,5.5-0.853,10.607-3.525,15.536c-1.546,2.856-1.444,5.965,1.575,8.315    c7.458,5.81,15.239,10.693,25.316,9.58c5.39-0.596,10.824-0.914,16.161-1.828c1.958-0.335,3.925-1.75,5.463-3.142    c1.938-1.755,1.836-3.778-0.547-5.386c-2.117-1.428-4.288-2.815-6.242-4.443c-3.807-3.17-7.581-6.397-11.191-9.792    c-5.553-5.223-6.52-12.162-6.626-19.273c-0.155-10.596,0.465-21.245-0.384-31.775c-0.653-8.074,1.032-15.039,5.194-21.714    c1.701-2.726,3.513-5.442,4.745-8.384c3.112-7.438,5.435-15.17,4.1-23.33c-1.077-6.572,2.844-12.064,3.256-18.271    c0.049-0.779,0.959-1.595,1.628-2.228c3.685-3.479,7.463-6.862,11.11-10.379c1.428-1.379,2.611-3.012,3.904-4.533    c1.021,1.901,2.143,3.754,3.044,5.712c4.464,9.666,6.332,19.837,6.568,30.478c0.139,6.124,1.122,12.261,2.154,18.323    c1.028,6.055,3.501,11.983,3.75,18.029c0.832,20.041,1.122,40.115,1.212,60.177c0.024,5.141-1.592,10.273-2.203,15.438    c-0.273,2.297-2.444,4.92,0.763,6.939c4.573,2.885,9.212,5.492,14.888,5.264c7.43-0.298,14.855-0.697,22.289-0.763    c4.435-0.037,8.878,0.428,13.305,0.774c3.28,0.258,3.745-1.562,3.02-4.055c-0.363-1.245-1-2.693-1.979-3.419    c-3.84-2.84-7.643-5.867-11.877-7.993c-5.035-2.525-9.613-5.517-10.865-11.09c-1.416-6.287-5.329-10.656-9.05-15.442    c-1.832-2.358-3.228-5.688-3.346-8.638c-0.399-10.175-0.212-20.379-0.118-30.571c0.024-2.688,0.094-5.495,0.849-8.037    c3.656-12.322,4.676-24.99,5.761-37.704c0.674-7.895,2.044-15.842,9.445-20.885c0.648-0.445,1.583-1.171,1.583-1.767    c0.017-6.438,5.365-8.454,9.274-11.812c1.795-1.543,3.276-3.95,3.912-6.238c1.465-5.243,1.779-10.85,3.599-15.933    c1.433-4.007,4.149-7.667,6.813-11.073c1.367-1.746,4.113-2.35,5.794-3.938c1.905-1.799,3.187-0.86,4.39,0.445    c0.76,0.819,1.057,2.064,1.592,3.174c4.361-3.162,9.759,2.053,13.741-2.224c0.103-0.11,0.89,0.522,1.396,0.665    c0.637,0.184,1.591,0.56,1.926,0.277c4.606-3.876,9.119-7.866,13.676-11.799c1.273-1.102,2.689-2.044,3.917-3.187    c2.061-1.922,4.517-3.66,5.879-6.015c1.155-1.994,1.873-3.504,4.423-3.974c1.188-0.216,2.216-1.941,3.064-3.162    c0.746-1.068,0.979-2.492,1.714-3.569c5.985-8.765,13.986-15.826,18.996-25.639c3.101-6.079,5.479-12.073,6.911-18.52    c0.592-2.656,1.058-4.59,3.656-4.627c0.6-2.823,0.514-5.671,1.767-7.69c3.966-6.406,3.488-14.395,7.748-20.645    c0.637-0.93,0.587-2.333,0.824-3.525c1.231-6.177,4.015-12.22,1.66-18.719c-0.041-0.118-0.045-0.31,0.021-0.4    c3.562-4.684,1.641-9.641,0.779-14.565c-0.367-2.105-0.723-4.239-0.791-6.369c-0.127-3.766-0.033-7.54-0.037-11.313    c-0.004-3.656-2.143-6.867,0.502-11.114c2.224-3.574,1.31-9.037,2.048-13.619c0.563-3.489,1.444-6.936,2.411-10.339    c0.232-0.82,1.343-1.396,2.044-2.081c0.584,0.775,1.171,1.55,1.384,1.832c0.763-1.538,1.644-3.317,2.525-5.096    c0.93,0.914,1.856,1.828,2.746,2.701c4.238-1.514,5.598-5.255,6.765-9.229c0.518-1.763,1.175-3.631,2.309-5.011    c0.71-0.865,2.424-0.91,4.484-1.583c4.573-9.053,4.573-9.062,14.892-8.086c0.792,0.074,1.579,0.542,2.351,0.494    c4.508-0.29,10.102,0.857,13.252-1.396c4.626-3.305,7.58-9.004,11.048-13.827c0.531-0.738,0.429-2.525-0.109-3.345    C550.184,98.906,547.785,95.691,545.296,92.562z";
@Override
public void start(Stage stage) throws Exception {

    this.stage = stage;

    Button button = new Button("Button");

    pane = new Pane();
    pane.getChildren().add(button);


    borderPane = new BorderPane();
    stage.setTitle("Circle");

    scrollPane = new ScrollPane(new Group(pane));
    borderPane.setCenter(scrollPane);

    SVGPath camel = new SVGPath();
    camel.setContent(coords);      
    pane.getChildren().add(camel);  

    pane.getTransforms().add(affine);


    scene = new Scene(borderPane, 640, 640);
    this.zoom(pane);
    stage.setScene(scene);
    stage.show();

}

public void zoom( Pane pane) {
    pane.setOnScroll(
        new EventHandler<ScrollEvent>() {
            @Override
            public void handle(ScrollEvent event) {
                double zoomFactor = 1.05;
                double deltaY = event.getDeltaY();

                if (deltaY < 0){
                    zoomFactor = 0.95;
                }
                pane.setScaleX(pane.getScaleX() * zoomFactor);
                pane.setScaleY(pane.getScaleY() * zoomFactor);
                event.consume();
            }
        });

}

public static void main(String[] args) {
    launch(args);
}

}

Can you explain me what I am doing wrong?

The shape is on a pane. When pane reach about 25% of its former size the zoom function stops working and I don't know why.

Heavyhearted answered 2/12, 2017 at 13:42 Comment(4)
Post a minimal reproducible example..Ela
@Ela please look at my updated code, just like you wanted to see.Heavyhearted
Very good! Let's try this: keep your cursor on the top left area (on or around the button) and tell me if you still have the problem.Ela
Thank you for you help. It helps me to understand the mechanism a little bit better.Heavyhearted
E
6

Your problem seems to be simple yet deceiving. I added the line

pane.setBackground(new Background(new BackgroundFill(Color.AQUAMARINE, null, null)));

to your code and now everything should be made clear:

enter image description here

But when I scroll smaller, it doesn't shrinks indefinitly.

You guessed it: you're shrinking the panel which is registered to listen to the mouse clicks until the mouse is not on the panel anymore, so the zooming stops.

The fix is simple - register the scene to listen to events instead of the panel:

scene.setOnScroll(new EventHandler<ScrollEvent>() { /*...*/ });

As I noted in another answer, coloring components during production phase really helps with these things.

Ela answered 3/12, 2017 at 2:55 Comment(1)
Thank you very much! That was the solution!Heavyhearted

© 2022 - 2024 — McMap. All rights reserved.