Я реализую приложение, используя две вспомогательные сцены, накладывающиеся друг на друга.Первый содержит узлы в 3d и второй компоненты пользовательского интерфейса (2d формы).Пользовательский интерфейс работает нормально, но при использовании setOnMouseClicked невозможно получить доступ к узлам в 3d-сцене.
Мой код выглядит следующим образом:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
final double width = 500.0;
final double height = 500.0;
// init scene
Group root = new Group();
Scene scene = new Scene(root, width, height);
scene.setFill(Color.BLACK);
root.setOnMouseClicked(clicked -> System.out.println("I'm root!"));
scene.setOnMouseClicked(clicked -> System.out.println("I'm scene!"));
// init sub scene 'red'
AnchorPane redRoot = new AnchorPane();
SubScene red = new SubScene(redRoot, width, height);
Rectangle redRec = new Rectangle(100, 100, Color.RED);
AnchorPane.setTopAnchor(redRec, 100.0);
AnchorPane.setLeftAnchor(redRec, 100.0);
redRoot.getChildren().add(redRec);
red.setOnMouseClicked(clicked -> System.out.println("I'm red!"));
redRoot.setOnMouseClicked(clicked -> System.out.println("I'm red root!"));
redRec.setOnMouseClicked(clicked -> System.out.println("I'm red rec!"));
// init sub scene 'blue'
AnchorPane blueRoot = new AnchorPane();
SubScene blue = new SubScene(blueRoot, width, height);
Rectangle blueRec = new Rectangle(100, 100, Color.BLUE);
AnchorPane.setBottomAnchor(blueRec, 100.0);
AnchorPane.setRightAnchor(blueRec, 100.0);
blueRoot.getChildren().add(blueRec);
blue.setOnMouseClicked(clicked -> System.out.println("I'm blue!"));
blueRoot.setOnMouseClicked(clicked -> System.out.println("I'm blue root!"));
blueRec.setOnMouseClicked(clicked -> System.out.println("I'm blue rec!"));
// add sub scenes
root.getChildren().addAll(red, blue);
//root.getChildren().addAll(blue, red);
// init stage
primaryStage.setScene(scene);
primaryStage.setTitle("Subscene test");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Запуск этого примераи нажатие на красный прямоугольник выводит:
I'm blue root!
I'm blue!
I'm root!
I'm scene!
Нажатие на синий выводит ожидаемое:
I'm blue rec!
I'm blue root!
I'm blue!
I'm root!
I'm scene!
Почему цепочка отправки событий не достигает красного прямоугольника?
Спасибо за вашу помощь !!!
С уважением, Грива