Событие не запускается с использованием javafx и mvvmfx - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь создать приложение с использованием инфраструктуры javafx и mvvmfx для вычисления и отображения Проблема CVRP , но когда я добавляю прослушиватель событий в круг, он никогда не запускается.

scope.subscribe("STOP_LOADED", (key, payload) -> {
        stepList.clear();
        stopList.clear();
        Stop depot = CVRPGraph.getDepot();
        stopList.add(new Circle(toUiUnit(depot.getX()), toUiUnit(depot.getY()), 3, Color.BLACK));
        stopList.addAll(CVRPGraph.getClientList().stream()
                .map(stop -> {
                    Circle circle = new Circle(toUiUnit(stop.getX()), toUiUnit(stop.getY()), 3, Color.RED);
                    circle.setOnMouseClicked(mouseEvent -> System.out.println(mouseEvent.getEventType().getName()));
                    return circle;
                })
                .collect(Collectors.toList()));
    });

stopList инициализируется следующим образом

private final ObservableList<Circle> stopList = FXCollections.observableArrayList();

, который я полностью заполняю в модели представления, и в представлении наблюдаю изменение, подобное этому

graphViewModel.stopList().addListener((ListChangeListener<? super Circle>) change -> {
            stopGroup.getChildren().clear();
            stopGroup.getChildren().addAll(change.getList());
        });

, где stopGroup - javafx.scene.Group

@FXML
private Group stopGroup;

Круг отображается, но когда я нажимаю на него, ничего не печатается

Скриншот программы Что я делаю не так?

PS Можно найти весь код здесь https://github.com/ptourneur/CapacitatedVehicleRoutingProblem но не стесняйтесь, если вам нужна дополнительная информация, спасибо

1 Ответ

0 голосов
/ 06 апреля 2020

Проблема в вашем примере приложения - неправильно настроенный макет. Вы используете AnchorPane неправильно. Ваш «ParamView.f xml» покрывает все окно приложения, даже если он виден только с правой стороны. И поэтому он также потребляет все события мыши. Если вы удалите представление paramsview, обработчики кликов будут работать как положено. Для отладки вы можете добавить визуальные границы к вашим компонентам контейнера, чтобы увидеть, сколько места они реально используют. Если вы используете AnchorPane, вы должны также обычно использовать AnchorPane.bottomAnchor, topAnchor и так далее.

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