Вы можете сделать любую панель прозрачной для мыши, чтобы она не потребляла никаких событий щелчка и позволяла им проходить в стек под ней.
Вот пример кода ... этот примерустанавливает 4 панели в стеке, и только основная панель принимает щелчки для начала.
StackPane rootPane = new StackPane();
VBox mainPane = new VBox(80);
BorderPane helpOverlayPane = new BorderPane();
helpOverlayPane.setMouseTransparent(true);
Canvas fullScreenOverlayCanvas = new Canvas();
fullScreenOverlayCanvas.setMouseTransparent(true);
VBox debugPane = new VBox();
debugPane.setAlignment(Pos.BASELINE_RIGHT);
AnchorPane debugOverlay = new AnchorPane();
debugOverlay.setMouseTransparent(true);
debugOverlay.getChildren().add(debugPane);
AnchorPane.setBottomAnchor(debugPane, 80.0);
AnchorPane.setRightAnchor(debugPane, 20.0);
rootPane.getChildren().addAll(mainPane, fullScreenOverlayCanvas, debugOverlay, helpOverlayPane);
Теперь, когда вы хотите использовать холст для рисования сверху, убедитесь, что вы изменили мышь прозрачной на ложь длятолько этот стек, и держите все панели поверх него прозрачными для мыши.
fullScreenOverlayCanvas.setMouseTransparent(false);
debugOverlay.setMouseTransparent(true);
fullScreenOverlayCanvas.setVisible(true);
doSomethingWithCanvasThatNeedsMouseClicks();
PS Я немного отредактировал код, который у меня был, поэтому он может не работать как есть.Также см. Обсуждение вопроса о том, как сделать прозрачными только части панелей: JavaFX Передача событий Mouse через прозрачный узел дочерним элементам