gpt4 book ai didi

java - 在javafx中注册鼠标处理程序但处理程序不是内联的

转载 作者:行者123 更新时间:2023-12-04 05:33:11 25 4
gpt4 key购买 nike

我在 JavaFX 中有一个应用程序变得有点大,我想保持代码的可读性。

我有一个 LineChart,我想要内置缩放功能,它发生在鼠标单击时。我知道我需要在图表上注册一个鼠标监听器。我无法从 Oracle 示例中弄清楚的内容,即此处所写:

http://docs.oracle.com/javafx/2/events/handlers.htm

是如何不将我的处理程序内联定义到注册中。换句话说,我希望处理程序的主体(多行代码)位于另一个类中。我可以这样做吗?如果是这样,我如何在我的主 Javafx Controller 代码中将处理程序注册到我的图表?

最佳答案

将您的处理程序放在一个实现 Mouse EventHandler 的新类中,并通过节点的 setOnClicked 方法向目标节点注册您的类的实例。

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.*;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
* JavaFX sample for registering a click handler defined in a separate class.
* http://stackoverflow.com/questions/12326180/registering-mouse-handler-but-handler-not-inline-in-javafx
*/
public class ClickHandlerSample extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(final Stage stage) throws Exception {
stage.setTitle("Left click to zoom in, right click to zoom out");
ImageView imageView = new ImageView("http://upload.wikimedia.org/wikipedia/commons/b/b7/Idylls_of_the_King_3.jpg");
imageView.setPreserveRatio(true);
imageView.setFitWidth(150);
imageView.setOnMouseClicked(new ClickToZoomHandler());

final StackPane layout = new StackPane();
layout.getChildren().addAll(imageView);
layout.setStyle("-fx-background-color: cornsilk;");
stage.setScene(new Scene(layout, 400, 500));
stage.show();
}

private static class ClickToZoomHandler implements EventHandler<MouseEvent> {
@Override public void handle(final MouseEvent event) {
if (event.getSource() instanceof Node) {
final Node n = (Node) event.getSource();
switch (event.getButton()) {
case PRIMARY:
n.setScaleX(n.getScaleX()*1.1);
n.setScaleY(n.getScaleY()*1.1);
break;
case SECONDARY:
n.setScaleX(n.getScaleX()/1.1);
n.setScaleY(n.getScaleY()/1.1);
break;
}
}
}
}
}

Sample program output

关于java - 在javafx中注册鼠标处理程序但处理程序不是内联的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326180/

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