JavaFX SplitPane不会弹出鼠标事件

JavaFX SplitPane不会弹出鼠标事件,java,javafx,mouseevent,splitpane,Java,Javafx,Mouseevent,Splitpane,我有一个边框窗格。在此窗格中,我已将带有多个控件的顶部设置为HBox。在中心我有一个e拆分窗格,它有两个画布。我想在分割窗格弹出的边框窗格上移动鼠标 如果我使用splitPane.setOnMouseMoved(…)我可以正确地获取事件。但是,BorderPane.setOnMouseMoved(…)仅当鼠标悬停在顶部时有效(如果找到HBox) 似乎SplitPane正在使用该事件。有人能证实这一点吗?如果是这样的话,我怎样才能让均分上升呢?请注意,当我应用过滤器时,会在向下的BorderPan

我有一个
边框窗格
。在此窗格中,我已将带有多个控件的顶部设置为
HBox
。在中心我有一个e
拆分窗格
,它有两个画布。我想在
分割窗格
弹出的
边框窗格
上移动鼠标

如果我使用
splitPane.setOnMouseMoved(…)
我可以正确地获取事件。但是,
BorderPane.setOnMouseMoved(…)
仅当鼠标悬停在顶部时有效(如果找到
HBox

似乎
SplitPane
正在使用该事件。有人能证实这一点吗?如果是这样的话,我怎样才能让均分上升呢?请注意,当我应用过滤器时,会在向下的
BorderPane
级别检测到偶数


TIA

大多数(如果不是全部的话)皮肤实现都是从默认情况下使用所有鼠标事件的皮肤实现扩展而来的。您可以通过受保护的方法对此进行配置。由于方法受到保护,您必须对蒙皮进行子类化(或使用反射)才能访问它:

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);
    }

}
皮肤类在JavaFX9中成为公共API。如果您使用的是JavaFX8,则需要扩展内部皮肤类

然后设置
拆分窗格的外观

SplitPane pane = ...;
pane.setSkin(new MySplitPaneSkin(pane));
您还可以通过
-fx skin
属性设置蒙皮:

.split窗格{
-fx皮肤:com.example.MySplitPaneSkin;
}
请注意,如上所述使用CSS将为样式表覆盖的所有
SplitPane
s设置外观(除非您更改它们的样式类)。您可能希望通过为
SplitPane
提供一个ID并使用
#ID{…}
使其更具体

另外,查看JavaFX11.0.2中的
SplitPaneSkin
实现,在每个使用所有事件的分隔器中添加了一个事件处理程序。因为这是一个私有的实现细节,所以您不能更改此行为。换句话说,即使使用上述代码,当鼠标位于分隔符上方时,鼠标事件也不会出现在
边框窗格中


另一个要考虑的是,在<代码>分割板< /代码>中的任何控件也可能会消耗鼠标事件。您需要为每个这样的子控件应用类似于上述内容的内容。

非常有效。不幸的是,我被javafx8困住了。我还尝试了'splitPane.setStyle(“-fxskin:com.example.MySplitPaneSkin;”),但没有成功。至于javfx11,您可以想到的任何替代方案。我希望避免以后再讨论这个问题。因为JavaFX8是预模块系统,所以您可以对内部
SplitPaneSkin
进行子类化,而不必担心模块访问错误。当您转到JavaFX11+时,答案中的解决方案应该可以正常工作。注意,设置
拆分窗格
外观
的另一种方法是子类化
拆分窗格
并覆盖
createDefaultSkin
;不过,您仍然需要对skin类进行子类化。