У меня есть два слоя (= AnchorPanes), уложенные один из другого с помощью StackPane. Таким образом, оба слоя заполняют всю сцену. Проблема в том, что только верхний уровень принимает события мыши.
Вот как строится сцена:
Только кнопка B получает события кликов, но кнопка A отсутствует.
Если я устанавливаю Layer B в прозрачную мышь (layerB.setMouseTransparent(true)
), кнопка A принимает события мыши. Но мышь прозрачные эффекты также все дети, поэтому кнопка B не принимает события мыши больше.
Как получить кнопки A и B для получения событий мыши?
Вот полный рабочий источник:
public class LayerTest extends Application {
@Override
public void start(final Stage primaryStage) throws Exception {
final Node layerA = createLayerA();
final Node layerB = createLayerB();
final Parent root = new StackPane(layerA, layerB);
final Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setWidth(250);
primaryStage.setHeight(200);
primaryStage.show();
}
private Node createLayerA() {
final AnchorPane layerA = new AnchorPane();
final Button buttonA = new Button("Button A");
AnchorPane.setLeftAnchor(buttonA, 10d);
AnchorPane.setTopAnchor(buttonA, 10d);
buttonA.setOnMouseClicked(e -> System.out.println("Button A clicked"));
layerA.getChildren().setAll(buttonA);
return layerA;
}
private Node createLayerB() {
final AnchorPane layerB = new AnchorPane();
final Button buttonB = new Button("Button B");
AnchorPane.setRightAnchor(buttonB, 10d);
AnchorPane.setBottomAnchor(buttonB, 10d);
buttonB.setOnMouseClicked(e -> System.out.println("Button B clicked"));
layerB.getChildren().setAll(buttonB);
return layerB;
}
public static void main(String[] args) {
launch(args);
}
}