Вы можете легко различать случаи, используя свойство pickResult
MouseEvent
. Обратите внимание, что в этом случае нет необходимости использовать фильтр событий, позволяющий использовать обработчик событий, что приводит к немного более короткому коду (конечно, если вам не нужно устанавливать это значение в другое).
stackPane.setOnMousePressed(evt -> {
// only update selection, if the cursor doesn't hover a child
if (evt.getPickResult().getIntersectedNode() == stackPane) {
listVisits.getSelectionModel().clearSelection();
evt.consume(); // don't pass the event to event handlers of ancestors (desired ?)
}
});
Обратите внимание, что с помощью обработчика событий вы можете использовать это событие для некоторых дочерних элементов, если вы хотите просто исключить передачу некоторых из этих дочерних элементов в StackPane
вместо всех. Если вы сделаете это, проверка pickResult
больше не требуется:
eventBlockingChild.setOnMousePressed(MouseEvent::consume);