底层的鼠标事件被忽略

2023-11-30

我有两层(= AnchorPanes),其中一层与 StackPane 堆叠在一起。所以两个图层都填充了整个场景。问题是,只有顶层接收鼠标事件。

这就是场景的构建方式:

Layout of the Scene

只有按钮 B 接收点击事件,按钮 A 则不接收。

Button A don't Receive Click Events

如果我将 B 层设置为鼠标透明(layerB.setMouseTransparent(true)),按钮A接收鼠标事件。但是鼠标透明也会影响所有子项,因此按钮 B 不再接收鼠标事件。

如何让Button A和Button B接收鼠标事件?

这是完整的工作源:

public class LayerTest extends Application {
    @Override
    public void start(final Stage primaryStage) throws Exception {
        final Node layerA = createLayerA();
        final Node layerB = createLayerB();
        final Parent root = new StackPane(layerA, layerB);
        final Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setWidth(250);
        primaryStage.setHeight(200);
        primaryStage.show();
    }

    private Node createLayerA() {
        final AnchorPane layerA = new AnchorPane();
        final Button buttonA = new Button("Button A");
        AnchorPane.setLeftAnchor(buttonA, 10d);
        AnchorPane.setTopAnchor(buttonA, 10d);
        buttonA.setOnMouseClicked(e -> System.out.println("Button A clicked"));
        layerA.getChildren().setAll(buttonA);
        return layerA;
    }

    private Node createLayerB() {
        final AnchorPane layerB = new AnchorPane();
        final Button buttonB = new Button("Button B");
        AnchorPane.setRightAnchor(buttonB, 10d);
        AnchorPane.setBottomAnchor(buttonB, 10d);
        buttonB.setOnMouseClicked(e -> System.out.println("Button B clicked"));
        layerB.getChildren().setAll(buttonB);
        return layerB;
    }

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

Solution

将以下行添加到示例代码中:

layerB.setPickOnBounds(false);

这将允许鼠标与您可以通过堆叠元素层看到的可见元素进行交互。

如果顶层中的元素与底层中的元素重叠,则单击顶层与底层重叠的部分将使顶层消耗鼠标事件,而底层将不会接收到它(这可能是您想要的) 。

另一种解释

如果您确实想拦截并处理所有层中的鼠标事件,请参阅 Uluk 评论中的链接问题:

  • JavaFX 2 事件分派到底层节点
  • JavaFx、事件拦截/消费

方法说明

的描述设置拾取边界 method:

定义当被触发时如何为该节点完成拾取计算MouseEvent或包含函数调用。如果pickOnBounds为 true,则通过与该节点的边界相交来计算拾取,否则通过与该节点的几何形状相交来计算拾取。


默认情况下,窗格没有可见的背景,那么为什么它们应该消耗鼠标事件呢?

对于 JavaFX 8 附带的默认样式表 modena.css,默认情况下窗格实际上确实具有非常微弱的阴影背景,因此它们可以消耗鼠标事件。为了防止这种情况,您可以将窗格的背景颜色设置为 null 或将窗格设置为鼠标透明.

这种行为在 JavaFX 2 和 JavaFX 8 之间发生了变化。JavaFX 2 附带了一个名为 caspian.css 的默认样式表,该样式表不设置窗格的背景。

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

底层的鼠标事件被忽略 的相关文章

  • 如何加载图像文件到ImageView?

    我试图在从文件选择器中选择图像文件后立即显示该图像文件 文件选择器仅限于 png 和 jpg 文件 所选文件存储在文件类型的变量中 为此 我设置了一个 ImageView 我希望用这个新文件设置图像 唯一的问题是它的类型是文件而不是图像 如
  • 如何从具有重复条目的过滤列表中删除特定索引?

    我有一个TableView由一个支持SortedList包裹一个FilteredList包裹一个ObservableList 过滤列表中的项目可以重复 也就是说 有可能是这样的情况list get 5 list get 10 用户可以选择行
  • javafx组合框下拉菜单从屏幕边缘跳出

    我有最新版本的 java 8 40 和 javaFX 我有一个包含 10 个项目的复选框 我编译并运行该程序 如果我将程序窗口移至监视器屏幕的底部 下拉列表将从监视器屏幕中消失 无法将项目点击出屏幕 相反 如果我尝试使用场景生成器 2 0
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • 复选框选择与 TableView 绑定

    How to bind with TableView selection model with checkbox isSelected in table view In manually using mouse multiple selec
  • JavaFX 动画使用循环?

    我正在尝试制作一款类似太空侵略者的游戏 我画了一个正方形 我想通过使用循环逐步向下移动它thread sleep 然而 正方形立即被绘制出来 我知道有可以使用的动画路径 但我想保持低水平并仅使用坐标系 有没有办法使用这样的循环来制作时间轴动
  • JavaFX 8 默认消息图标

    随着 JavaFX 的最近几次更新 我们收到了警报 我想获取消息的默认图标 错误 警告 在Swing中 我可以通过一些方式获取L F消息图标UIManager的属性 如何在 JavaFX 中获取消息的默认图标 它们是包含在属性中 还是由 C
  • mobileapplication.mobileevent BACK_BUTTON_PRESSED

    我的两个视图中有 2 个 Android 本机音频实例 当用户按下后退按钮并离开视图时 我试图让音频停止 因为它不会自动发生 我查看了文档并看到了 MobileEvent 类 我尝试实现它的构造函数 但没有成功 这是我的第一个应用程序 为此
  • 在JavaFX中如何在表视图中添加带有数据的组合框

    我已经尝试了很多 但无法将数据库中的所有值填充到我的组合框表格单元格中 控制器 java public class controller GetConnection gc new GetConnection PreparedStatemen
  • JavaFX 2 XYChart.Series 和 setOnMouseEntered

    是否可以设置 XYChart Series 的实例来作用于 setOnMouseEntered 在我看来 使其工作的一个前提条件是实现 EventTarget 接口 至于JavaFX XYChart Series 当光标触摸黄线时 我想突出
  • JavaFX 模块对于 VM 不可见

    我使用 Intellij Idea 作为我的 IDE 由于我需要使用 css 文件 因此我安装了 Intellij Ultimate 现在 javaFx 不适用于它们 抛出异常 boot层初始化时出错 java lang module Fi
  • 如何将 CSS 样式表附加到 FXML?

    遵循 Oracle 教程http docs oracle com javafx 2 get started fxml tutorial htm http docs oracle com javafx 2 get started fxml t
  • JavaFX:使用常量字符串前缀绑定 StringProperty

    我对 JavaFX 中的绑定功能有疑问 我想要的是绑定 2 个字符串属性 但他们的价值观不应该是平等的 让我举个例子 我有一个 StringProperty 代表我的应用程序中最后打开的项目 该值类似于 C temp myProject p
  • JavaFX TabPane 禁用按键切换选项卡

    我有一个Tab有一些内容 ScrollBar和别的 The ScrollBar has event handler for keys left and right 但如果我按下这些按钮Tabs被切换 因为TabPane还有一个密钥处理程序
  • 如何在 JavaFX 中对单选按钮的最大可选复选框进行限制?

    请看下面的图片 您就会了解我的应用程序的布局 我希望能够动态选择多少CheckBox 启用下拉菜单 是可选的 固定数量 我想用这 3 个人来实现这个目标RadioButton 在垂直模式下全部 4CheckBox必须选择 不少于 在混合模式
  • 我在使用 JavaFX 绘制十字时遇到问题

    我正在尝试编写代码 在网格上对角绘制 3 个形状 前两个形状是正方形和圆形 我能做到 然而 第三种形状让我有些悲伤 我应该画一个十字 T 版本 而不是 X 每次我写出代码时 它看起来就像一个侧面 我知道我只是错过了一些简单的东西 但我真的很
  • 如何在JavaFX中有效地滚动和缩放大图像?

    作为图像处理应用程序的一部分 我需要创建具有缩放 滚动和矢量叠加功能的简单查看器模块 图像相当大 40000x20000 这使得 ImageView 上的操作变慢 缓冲等 在 JavaFX 中处理巨大图像时 改善用户体验的最佳选项是什么 我
  • JavaFX ImageView 未更新

    因此 我尝试将图像加载并保存到 imageView 中 其中图像的位置是通过文件浏览器选择的 我已经为此工作好几天了 如果我不能解决这个问题 我就会中风 我已经尝试了我能想到的一切 预先感谢您的帮助 UPDATED 这是我的主要课程 pub
  • JAVAFX制作动态文本区域大小

    我正在使用 JAVAFX 制作聊天应用程序 消息显示在textArea中 但textArea始终具有相同的大小 如何使 textArea 完全适合文本量 氨氮 下面的代码正是你想要的 public class Main extends Ap
  • 如何设置菜单按钮和菜单项的样式

    我尝试更改菜单按钮中的样式 我可以更改菜单按钮样式 但不能更改其菜单项 无论我尝试什么 菜单按钮内的菜单项都保持不变 menu button fx background color black menu button label fx ba

随机推荐

  • 如何将文件复制/替换到 VB.NET 中的文件夹中?

    I used File Copy source target True where source是完整路径名 例如c source txt and target是一个文件夹 其中可能包含同名文件 我想复制source txt到目标文件夹并覆
  • 文件浏览器访问 Chrome 的沙盒文件系统

    我正在编写一个 Google Chrome 应用程序 它使用 HTML5 文件系统 API 在本地存储内容 有什么方法可以使用 Windows 资源管理器访问 Chrome 存储这些文件的目录 还是完全虚拟且无法从应用程序外部访问 我无法通
  • Android解析json树

    我有树形 JSON 结构数据 就像是 result id 1 name test1 id 2 name test12 children id 3 name test123 children id 4 name test123
  • 如何保护 Android 资产文件夹免受黑客攻击

    如何保护 Android 资产文件夹免受黑客攻击 有什么方法可以保护assets文件夹吗 您保存的任何内容Asset仅当您将其复制到内部或外部缓存目录中后才能访问该文件夹 因此 您无法同时保护它免受剥削者的侵害 但是 您可以将此文件夹中的任
  • 核心数据多线程取记录

    我对 CoreData 中的多线程有一个疑问 如果我们使用多线程 我们应该使用单独的 NSManagedObjectContext 来插入新数据或更新 否则我们可以使用父子上下文方法 但我只是创建新的 NSManagedObjectCont
  • string array[] = ""; 是什么意思?是什么意思以及为什么它有效?

    string array 我怎样才能分配一个const char 到一个数组 是不是等同于 string array 这对我来说是有意义的 然而 这仍然不起作用 int array 5 那么它们之间有什么区别 它不起作用int arrays
  • 如何在 PIVOT 中用 0 输出替换(空)值

    我尝试在 PIVOT 函数中将 空 值转换为 0 零 输出 但没有成功 下面是我尝试过的表格和语法 SELECT CLASS AZ CA TX FROM TEMP PIVOT SUM DATA FOR STATE IN AZ CA TX A
  • SQLiteException:不存在这样的表

    我试图在我的 Android 应用程序中创建一个 SQLite 数据库 但我的代码始终抛出 SQLiteException 表示不存在这样的表 我是 SQL 新手 但我认为这意味着我的创建脚本无法正常运行 我的部分代码如下 请指出您发现的任
  • Metro App 如何禁用 Gridview 滚动

    是否可以在 GridView 中禁用滚动 在 GridView 内部尝试一下
  • Flex/Flash可以录屏吗?

    这个问题非常简单 我实际上只想流式传输用户计算机的视频 就像从网络摄像头录制一样 但源来自桌面 想想 截屏工具 我特别想在纯 Flash 中执行此操作 无需下载或附加组件 对于 Google 来说 这将是一个简单的问题 但它对所有 导出到
  • 显式调用时析构函数被调用两次

    我正在用这段代码尝试 C 中的析构函数 include
  • 使用 osmdroid-android-3.0.7 运行时无法访问资源图标

    我正在尝试启动一个简单的地图活动 使用 osmdroid android 3 0 7 库显示地图和几个标记 该代码在旧版本 1 10 下运行 我收到以下错误 02 03 15 14 30 574 E AndroidRuntime 10277
  • 如何给盒子的一部分着色

    我试图显示红色和橙色框的左侧 10 并使背景的其余部分透明 或白色 这可能吗 如果是的话请告诉我该怎么做 谢谢 box background linear gradient to right red orange border 1px bl
  • 如何从 Eclipse 项目中删除 javascript 验证?

    我在我的项目中使用 Eclipse 在搞乱我的 Eclipse 设置时 我打开了 Javascript 支持 现在 eclipse 抱怨 JQuery 库有错误并且不允许我编译该项目 有谁知道如何关闭 javascript 验证吗 我实际上
  • 用Matlab对角展开矩阵

    我有一个矩阵B我想获得一个矩阵C维度的 L k m by L n L and k是输入值 B0 B1 Bk有尺寸m by n 例如 如果我有一个矩阵B 1 1 1 1 1 1 with B0 1 1 B1 1 1 and B2 1 1 以及
  • 根据包含列名的变量从不同列中选择值[重复]

    这个问题在这里已经有答案了 我有一个像这样的 data table col1 col2 col3 new 1 4 55 col1 2 3 44 col2 3 34 35 col2 4 44 87 col3 我想填充另一列matched va
  • 如何在 SoapUI 中访问需要用户名/密码的 wsdl URL?

    如何访问 wsdl URLSOAPUI 这需要用户名 密码 http localhost 8080 ws hello1 wsdl SoapUI 4 6 4 中检索受密码保护的 WSDL 时存在错误 该错误已修复5 0 0 可以从以下地址下载
  • Hashbang 与 URI 解析

    我希望将我的网站移至完全异步文档加载 但我不想使用 请求处理方法 因为 1 我不想断开链接 2 我想要一种更灵活的方式来处理站点获取的 URI 我已经能够为我的网站构建一个轻型 MVC 允许使用通用样式的 url 例如 http ddrew
  • JavaFX 8 Z 缓冲区问题

    我的问题是 JavaFX 3D 中的 Z Buffer 它似乎没有在我的机器上按预期工作 我知道以下问题 重叠的形状 and Z顺序 不过 我确实启用了 Z 缓冲区 并且节点仍然按照它们添加到场景图中的顺序进行渲染 也许我缺少一些依赖项或其
  • 底层的鼠标事件被忽略

    我有两层 AnchorPanes 其中一层与 StackPane 堆叠在一起 所以两个图层都填充了整个场景 问题是 只有顶层接收鼠标事件 这就是场景的构建方式 只有按钮 B 接收点击事件 按钮 A 则不接收 如果我将 B 层设置为鼠标透明