gpt4 book ai didi

event-handling - 如何在 Javafx 8 中触发 Zoomevent

转载 作者:行者123 更新时间:2023-12-02 01:50:52 24 4
gpt4 key购买 nike

我正在开发一个非常简单的程序。我有一个 ImageView,我想向这个 ImageView 触发我创建的 ZoomEvent。在 Javafx 8 中,有 2 个构造函数可用于创建 ZoomEvent。但是听众没有捕捉到事件。

    StackPane root = new StackPane();
final ImageView img = new ImageView(url);
img.setOnZoom(new EventHandler<ZoomEvent>() {

@Override
public void handle(ZoomEvent t) {
System.out.println("Zoom!");
}
});

img.setOnZoomStarted(new EventHandler<ZoomEvent>() {

@Override
public void handle(ZoomEvent t) {
System.out.println("Zoom Started!");
}
});

img.setOnZoomFinished(new EventHandler<ZoomEvent>() {

@Override
public void handle(ZoomEvent t) {
System.out.println("Zoom finished!");
}
});
ZoomEvent evt = new ZoomEvent(ZoomEvent.ANY, 200,200,200,200,false,false,false,false,false, false, 5.0,5.0, null);

root.getChildren().add(img);
Scene scene = new Scene(root, 600, 600);
primaryStage.setTitle("Zoom Sample");
primaryStage.setScene(scene);
primaryStage.show();

到目前为止,这是我的代码,我不知道哪里出了问题。没有任何输出。

最佳答案

  1. 您从未使用 ZoomEvent.fireEvent(target, event) 触发事件或 stage.fireEvent(event) .
  2. 您创建了错误类型的事件(创建的是 ZoomEvent.ZOOM,而不是 ZoomEvent.ANY)。
  3. 您没有正确设置事件屏幕坐标。

工作样本:

import javafx.application.Application;
import javafx.geometry.Point2D;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.input.ZoomEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Zoom extends Application {

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

@Override
public void start(Stage stage) {
final ImageView img = new ImageView(
"http://icons.iconarchive.com/icons/kirei-kaze/kikis-delivery-service/256/jiji-icon.png" // image license: License: Free for non-commercial use. The products or characters depicted in these icons are © by Studio Ghibli. Linkback: http://www.iconarchive.com/artist/kirei-kaze.html
);
img.setOnZoom(e -> System.out.println("Zoom!"));

StackPane layout = new StackPane(img);
stage.setScene(new Scene(layout, 600, 600));
stage.show();

Point2D screenCoords = layout.localToScreen(300, 300);
ZoomEvent evt = new ZoomEvent(
ZoomEvent.ZOOM,
300, 300,
screenCoords.getX(), screenCoords.getY(),
false,false,false,false,false, false, 5.0,5.0, null
);
ZoomEvent.fireEvent(img, evt);
}
}

关于event-handling - 如何在 Javafx 8 中触发 Zoomevent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22856296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com