JavaFX: работа с MouseEvents в подсценах - PullRequest
0 голосов
/ 24 февраля 2019

Я реализую приложение, используя две вспомогательные сцены, накладывающиеся друг на друга.Первый содержит узлы в 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!

Почему цепочка отправки событий не достигает красного прямоугольника?

Спасибо за вашу помощь !!!

С уважением, Грива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...