首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX SplitPane不冒泡鼠标事件

JavaFX SplitPane不冒泡鼠标事件
EN

Stack Overflow用户
提问于 2019-02-17 18:29:29
回答 1查看 201关注 0票数 1

我有一个BorderPane。在此窗格中,我将具有多个控件的top设置为HBox。在中心,有两个画布的e SplitPane。我想让鼠标在BorderPane上移动,当它从SplitPane上冒出来时。

如果我使用splitPane.setOnMouseMoved(...),就会正确地得到事件。但是,只有当鼠标悬停在BorderPane.setOnMouseMoved(...)顶部(如果找到HBox )时,HBox才能工作。

SplitPane似乎正在消耗这个事件。有人能证实这一点吗?如果是这样的话,我怎样才能让偶数泡起来呢?注意,当我应用过滤器时,在下降的过程中会在BorderPane级别检测到偶数。

提亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-17 20:30:44

大多数皮肤实现(如果不是全部)都是从默认消耗所有鼠标事件的SkinBase扩展而来的。您可以通过受保护的consumeMouseEvents(boolean)方法对其进行配置。由于该方法受到保护,您必须子类皮肤(或使用反射)来访问它:

代码语言:javascript
复制
package com.example;

import javafx.scene.control.SplitPane;
import javafx.scene.control.skin.SplitPaneSkin;

public class MySplitPaneSkin extends SplitPaneSkin {

    public MySplitPaneSkin(SplitPane control) {
        super(control);
        consumeMouseEvents(false);
    }

}

在JavaFX 9中,皮肤类变成了公共API。如果您使用的是JavaFX 8,则需要扩展内部皮肤类。

然后设置SplitPane的外观。

代码语言:javascript
复制
SplitPane pane = ...;
pane.setSkin(new MySplitPaneSkin(pane));

还可以通过使用CSS属性设置皮肤-fx-skin

代码语言:javascript
复制
.split-pane {
    -fx-skin: com.example.MySplitPaneSkin;
}

请注意,如上所述,使用CSS将为样式表所涵盖的所有SplitPane设置皮肤(除非您更改了它们的样式)。您可能希望通过给SplitPane一个ID并使用#id { ... }来使其更加具体。

此外,查看SplitPaneSkin 11.0.2中的JavaFX实现,将一个事件处理程序添加到每个分隔器中,该分隔符将消耗所有事件。由于这是一个私有实现细节,所以不能更改此行为。换句话说,即使使用上面的代码,当鼠标越过分隔符时,鼠标事件也不会冒泡到BorderPane

需要考虑的另一件事是,SplitPane中的任何控件也可能会消耗鼠标事件。您需要为每个这样的子控件应用类似于上面的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54736344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档