Большинство, если не все, реализации скина простираются от 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);
}
}
Классы скинов стали открытым API в JavaFX 9. Если вы используете JavaFX8 вам нужно будет расширить внутренний класс скина .
Затем вы должны установить скин SplitPane
.
SplitPane pane = ...;
pane.setSkin(new MySplitPaneSkin(pane));
Вы также можете установить скин используя CSS через свойство -fx-skin
:
.split-pane {
-fx-skin: com.example.MySplitPaneSkin;
}
Обратите внимание, что использование CSS, как указано выше, установит обложку для всех SplitPane
s, охватываемых таблицей стилей (если тольковы меняете их стиль стилей).Возможно, вы захотите сделать это более конкретным, указав свой SplitPane
идентификатор и используя #id { ... }
.
Кроме того, глядя на реализацию SplitPaneSkin
в JavaFX 11.0.2, к каждому из них добавляется обработчик событий.делитель, который потребляет все события.Поскольку это частная реализация, вы не можете изменить это поведение.Другими словами, даже с помощью приведенного выше кода события мыши не будут всплывать до вашего BorderPane
, когда мышь находится над разделителем.
Еще одна вещь, которую следует учитывать, - это то, что любые элементы управления в SplitPane
будутскорее всего, также потреблять события мыши.Для каждого такого дочернего элемента управления вам нужно применить что-то похожее на вышеприведенное.