java - 在 JavaFX 中使用鼠标滚轮缩放

标签 java javafx mouselistener

我正在尝试使用鼠标滚轮进行缩放。放大效果完美。但是当我滚动得更小时,它不会无限缩小。这意味着,在 Pane 达到特定大小后,它不会继续缩小。这是我的方法:

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);
}

你能解释一下我做错了什么吗?

形状在 Pane 上。当 Pane 达到其原来大小的 25% 左右时,缩放功能停止工作,我不知道为什么。

最佳答案

你的问题看起来很简单,但具有欺骗性。我添加了行

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

到你的代码,现在一切都应该清楚了:

enter image description here

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

您猜对了:您正在缩小注册为监听鼠标点击的面板,直到鼠标不再位于面板上,因此缩放停止。

修复很简单——注册场景而不是面板来监听事件:

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

正如我在另一个 answer 中指出的那样,在生产阶段为组件着色确实有助于解决这些问题。

关于java - 在 JavaFX 中使用鼠标滚轮缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47608516/

相关文章:

java - 我无法选择何时使用 MouseListener 对象

java - 检查按下按钮多长时间

java - 将应用程序从控制台获取到 GUI

java - 我在创建响应式机器人时遇到问题

JavaFX:在 ButtonBar 内对齐按钮(使用 SceneBuilder 或 fxml)

Java swing图形绘制并用颜色填充选定的矩形

java - schedule 和 scheduleAtFixedRate 有什么区别?

java - QAF:java.lang.IllegalArgumentException:必须定义添加操作的键

javafx - observablelist 何时生成更新更改事件?

java - 实时图表 - ArrayList 转换错误