JavaFX:父级及其子级的鼠标单击事件

2023-12-09

我有一张卡片,由页眉、正文和页脚组成,可以包含更多节点,如标签、文本字段等。

我需要抓住on mouse clicked单击发生时的任何时间事件卡内,无论它是卡本身还是它的子卡之一。现在,如果我单击文本字段,则不会触发事件。

private StackPane newCard() {
        //card wrapper
        StackPane card = new StackPane();
        VBox cardContent = new VBox();

        JFXDepthManager.setDepth(card, 1);
        //Header
        StackPane header = new StackPane();

        VBox headerContent = new VBox();
        header.getChildren().add(headerContent);
        Label label = new Label("Card title");

        //if I click this text field, event is not triggered
        TextField groupCode = new TextField();

        headerContent.getChildren().addAll(label, groupCode);

        //body
        StackPane body = new StackPane();


        //footer
        StackPane footer = new StackPane();


        cardContent.getChildren().addAll(header, body, footer);
        card.getChildren().add(cardContent);

        //event
        card.setOnMouseClicked(event -> System.out.println("Clicked!"));

        return card;
    }

就像上面的例子一样,如果我单击文本字段来输入内容,"Clicked!"未打印。


你可以这样做

card.addEventFilter(MouseEvent.MOUSE_CLICKED, event -> System.out.println("Clicked!"));

描述了JavaFX中事件处理的完整机制here。但简而言之,一个事件有一个target,在本例中是与鼠标单击相交的最顶层节点。 (直观上,它是用户在视觉上单击的节点。)因此,如果您单击文本字段,则目标就是文本字段。事件派发有两个阶段:捕获 and bubbling。在捕获阶段,事件首先传递到根节点,然后传递到作为目标祖先的根的子节点,依此类推,直到到达目标。在捕获阶段,任何事件filters注册到适当的节点将被调用。事件捕获完成后,冒泡阶段开始。在冒泡阶段,事件首先传递到目标节点,然后传递到其父节点,依此类推,直到再次到达根节点。在冒泡阶段,事件handlers调用在节点注册的。

在事件处理的任何阶段,过滤器或处理程序都可以consume事件。这基本上可以防止事件的进一步传播。一些控件具有消耗某些事件的内置处理程序;您的示例中的文本字段就是其中之一。因此,文本字段上的鼠标单击不会传播到父节点中的处理程序。注册事件过滤器而不是处理程序允许事件由您的处理程序处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX:父级及其子级的鼠标单击事件 的相关文章

随机推荐

  • 更新 pandas groupby().last() 的列值

    给定数据框 dfd pd DataFrame A 1 1 2 2 3 3 B 4 5 6 7 8 9 C a b c c d e 我可以使用以下方法找到每个 A 组的最后一个 C 值 dfd groupby A last C 但是 我想将
  • 复制初始化和直接初始化的混淆

    考虑简单的陈述 摘自在 C 中 复制初始化和直接初始化之间有区别吗 A c2 A 该语句对临时值进行值初始化 然后复制该值 值写入 c2 阅读 5 2 3 2 和 8 5 14 这当然需要一个 非显式复制构造函数 阅读 8 5 14 和 1
  • 协议和委托之间的区别?

    和有什么区别protocol and a delegate and 我们如何声明variables in a protocol class 一个协议 用 protocolObjective C 中的语法 用于声明类 采用 声明它将使用此协议
  • 如何在调试模式下刷新 fmt 输出?

    我正在尝试fmt我确实从下面的代码中得到了输出 include
  • 通过选择部分或全部字符生成所有排列的算法

    我需要通过选择一些元素来生成字符串的所有排列 就像如果我的字符串是 abc 输出将是 a b c ab ba ac ca bc cb abc acb bac bca cab cba 我想到了一个基本算法 其中我生成 abc 的所有可能组合
  • Typescript 不会复制 d.ts 文件来构建

    所以也许我很困惑 但我想如果我添加declaration true到我的 tsconfig json 我可以让它 tsc 复制我的 d ts文件 以及转译的代码和它的d ts files EG src lib types d ts foo
  • 使用 Mac 在服务器上运行 Python

    我正在尝试在这个地址运行我的 python 文件 http usersignup drawyourpets com 正如您所看到的 它显示了文件夹中的文件 但并未实际运行它们 EDIT 现在它只返回 500 错误 当我使用 Google A
  • OAuth2 - 检索 TOKEN 时 OPTIONS 请求的状态 401

    我们的堆栈使用 Backbone 作为客户端应用程序 使用 Spring Boot 作为 RESTful API 我们正在尝试使用 OAuth2 进行基本身份验证 并由用户提供用户名和密码 我们使用 Spring Security 进行身份
  • 在 ES6 中正确扩展数组/代理?

    目前正在尝试制作数组 对象的自定义实现 我想最终会非常相似 并且偶然发现了一个让我发疯的问题 正如您所看到的 b 只是一个 array 的实例 即使它是从自定义类 CachedArray 创建的 因此我的自定义函数 testPush 未定义
  • Rails SELECT 40001 SQL_NO_CACHE 从未知位置触发

    在 MySQL 数据库服务器中 我们有名为test 该架构具有名为users 桌子usersRails 应用程序未在任何地方使用 唯一的入口处users发现位于 schema rb 中 The users表存储了一些数据 并且数据由在其他服
  • Fluent NHibernate 使用 FluentMappings 忽略 ClassMap 内的属性

    我在我的项目中使用 NHibernate 3 1 和 Fluent NHibernate 作为 ORM 我需要有一个被 Fluent NHibernate 忽略的 POCO 属性 起初 我的帖子可能看起来与这个问题 但事实并非如此 我的复杂
  • arima.sim() 函数具有变化:样本大小、phi 值和 sd 值

    我想模拟ARIMA 1 1 0 随变化 样本量 phi值 标准偏差值 我很佩服下面的吼叫r代码只是模拟一个ARIMA 1 1 0 我想遵循格式来模拟许多ARIMA 1 1 0 随着变化的样本量 phi值 and 标准偏差值 wn lt rn
  • 无法执行不同的投影查询

    我有一个简单的小 观察 课 from google appengine ext import ndb class Observation ndb Model remote id ndb StringProperty dimension id
  • 在 MVC3 中使用 WebApi

    使用 WebApi 在 MVC 客户端中使用服务的最佳方式是什么 如果响应返回为
  • PHP数据库连接实践

    我有一个连接到多个数据库 Oracle MySQL 和 MSSQL 的脚本 每次脚本运行时可能不会使用每个数据库连接 但所有数据库连接都可以在单个脚本执行中使用 我的问题是 即使所有连接可能都没有被使用 最好在脚本开始时连接到所有数据库一次
  • 基于范围的 for 如何适用于普通数组?

    在 C 11 中 您可以使用基于范围的for 其作用为foreach其他语言的 它甚至适用于普通的 C 数组 int numbers 1 2 3 4 5 for int n numbers n 2 它如何知道何时停止 它是否仅适用于已在同一
  • 为什么同样的方法在 Swift 的数组扩展中会失败?

    当我尝试打电话时 我的行为很奇怪sort 从数组扩展中 例如此方法 func test let a 1 2 3 sort a x y in x lt y 可以单独工作 但在内部时会失败Array扩大 extension Array func
  • 从字节数组中创建新的 FileStream

    我正在尝试从字节数组创建一个新的 FileStream 对象 我确信这根本没有意义 所以我将在下面尝试更详细地解释 我正在完成的任务 1 读取之前的源文件压缩的2 使用GZipStream解压数据 3 将解压后的数据复制到字节数组中 我想改
  • Android 设备重启后广播接收器不工作

    我已经检查了所有相关问题 但没有找到解决此问题的方法 所以这对我来说绝对是一个新问题 我拥有的 我有一个 Android 应用程序 它在其清单中注册了一些广播接收器 这就是我的清单的样子
  • JavaFX:父级及其子级的鼠标单击事件

    我有一张卡片 由页眉 正文和页脚组成 可以包含更多节点 如标签 文本字段等 我需要抓住on mouse clicked单击发生时的任何时间事件卡内 无论它是卡本身还是它的子卡之一 现在 如果我单击文本字段 则不会触发事件 private S