大多数(如果不是全部)皮肤实现扩展SkinBase
,默认情况下消耗所有鼠标事件。您可以通过受保护的consumeMouseEvents(boolean)
方法进行配置。由于该方法受到保护,您必须对皮肤进行子类化(或使用反射)才能访问它:
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
.
SplitPane pane = ...;
pane.setSkin(new MySplitPaneSkin(pane));
您还可以通过属性使用 CSS设置皮肤:-fx-skin
.split-pane {
-fx-skin: com.example.MySplitPaneSkin;
}
请注意,使用上面的 CSS 将为样式表覆盖的所有 SplitPane
s 设置外观(除非您更改它们的样式类)。您可能希望通过提供您SplitPane
的 ID 并使用#id { ... }
.
此外,查看SplitPaneSkin
JavaFX 11.0.2 中的实现,一个事件处理程序被添加到每个使用所有事件的分隔器。由于这是一个私有实现细节,您无法更改此行为。换句话说,即使使用上面的代码,BorderPane
当鼠标悬停在分隔符上时,鼠标事件也不会冒泡。
要考虑的另一件事是,其中的任何控件SplitPane
也可能会消耗鼠标事件。您需要为每个此类子控件应用与上述类似的内容。