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

2024-05-09

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

我有一个折线图,我希望内置缩放功能,该功能在单击鼠标时发生。我知道我需要向图表注册鼠标侦听器。我无法从 Oracle 示例中弄清楚什么,即如下所示:

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

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


将您的处理程序放在一个实现 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;
        }
      }
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 javafx 中注册鼠标处理程序,但处理程序不是内联的 的相关文章

随机推荐

  • Android - 具有可序列化对象的 SharedPreferences

    我知道 SharedPreferences 有putString putFloat putLong putInt and putBoolean 但我需要存储一个类型的对象Serializable in SharedPreferences 我
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 如何使用 wpf webbrowser 将数据发布到 Web 服务器

    我想从数据库获取数据并使用它来让用户登录到网站 我有一个包含 Web 浏览器控件的 wpf 页面 我有这样的代码 用于将用户登录到用 php 编写的网站
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • android sqlite 如果不存在则创建表

    创建新表时遇到一点问题 当我使用 CREATE TABLE 命令时 我的新表按应有的方式形成 但是当我退出活动时 应用程序崩溃 并且我在 logcat 中得到一个表已存在 如果我使用 CREATE TABLE IF NOT EXISTS 则
  • 无法通过 HTTPS 调用 Web 服务

    我正在开发一个 Net 应用程序 它与 Web 服务通信以获取一些数据 Net 应用程序和 Web 服务之间的连接是通过 HTTPS 完成的 当我从 Net 应用程序调用 Web 服务时 我得到以下堆栈跟踪 System Net WebEx
  • Android 如何从我的应用程序使用 SD 卡中的文件路径预览图像

    文件存在于sdcard image jpg我想创建我自己的应用程序 活动 按下按钮时 需要使用内置图像查看器显示存储在 SD 卡中的图像 按图像查看器中的后退按钮后 它应该返回到我正在运行的应用程序 需要一些帮助 您可以为此创建一个具有适当
  • 未调用内容提供商 query() (Android TV)

    据报道 我正在尝试将我的应用程序纳入 Android TV 全局搜索中文档 http developer android com training tv discovery searchable html我必须创建以下内容 内容提供商 可搜
  • iPhone - cancelPerformSelectorWithTarget 不起作用

    如果我在 UIView 的子类中执行此操作 self performSelector selector doSomething withObject nil afterDelay 5 然后像这样取消它 我已经尝试了两个版本 NSRunLoo
  • 如何使用 python 操作系统更改驱动器?

    我正在尝试更改当前目录C to Y 我试过 import os os chdir Y 但我不断收到错误消息 提示无法找到驱动器 本质上我正在寻找相当于 cd d cmd 中的命令 你确定吗Y 确实是有效的驱动器号吗 Try os chdir
  • 生产中未使用快速会话设置 Cookie

    我的应用程序分为客户端和服务器 客户端是托管在 Now sh 上的前端 Nextjs 应用程序 服务器是使用 Express 创建并托管在 Heroku 上的后端 因此域是 client app now sh 和 server app he
  • 在 AngularJS 中覆盖运行时的依赖关系

    我有一个服务叫 doggedHttp 它公开了与 http 现在我想创建一个 doggedResource服务是有角度的 resource服务之上 doggedHttp代替 http 换句话说我想注入 doggedHttp as the h
  • 如何让 xcodebuild 将编译错误和警告打印到 stderr?

    似乎 xcodebuild 将所有内容打印到标准输出 Applications Xcode app Contents Developer usr bin xcodebuild project test xcodeproj build tar
  • 在 eslint 上使用数组解构(prefer-destructuring)错误

    这是我的代码中 eslint 不喜欢的部分 this attributes mb start date this dateInstance config defaultDate split T 0 我该如何重写它来克服这个错误 eslint
  • Docker DNS 设置

    我尝试使用自定义网络和 dos 设置创建 docker 容器 docker网络创建 driver bridge opt com docker network bridge enable ip masquerade true opt com
  • 如何使用 Perl 从 NCBI 获取 FASTA 核苷酸格式的基因特征?

    我可以手动下载 FASTA 文件 如下所示 gt lcl CR543861 1 gene 1 ATGCTTTGGACA gt lcl CR543861 1 gene 2 GTGCGACTAAAA 通过单击 发送到 并选择 基因特征 FAST
  • 如何阻止 Jenkins 中的 CI 构建意外发布到发布存储库?

    有时 开发人员会不小心签入 POM 中没有 SNAPSHOT 的版本 这将构建 Maven 项目并将工件发布到发布存储库 我怎样才能避免这种情况呢 我只想发布构建工件以发布存储库 而不是 CI 构建 我考虑了以下问题 但它们都不是一个简单的
  • WinRT 作为 Win32 API 的替代品

    互联网上有很多博客说 winrt 是 win32 api 的替代品 这是真的吗 甚至我读到为 Metro 应用程序开发的应用程序使用 winrt 所以我理解正确吗 那些 Metro 应用程序必须经过 winrt 而经典应用程序必须经过 wi
  • 在 Apache 上设置 websocket?

    所以我正在对 websockets 进行一些研究 我有几个问题似乎找不到明确的答案 如何在 Linux 服务器上设置 Web 套接字 有 Apache 模块吗 我可以吗have使用第 3 方 PHP 代码或类似代码 除了浏览器兼容性之外 问
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora