Проблема с JavaFX pane.getChildren (). Remove () в лямбде - PullRequest
0 голосов
/ 15 апреля 2020

Я написал код:

public class MousePosition extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Pane pane = new Pane();
        Text text = new Text();

        Scene scene = new Scene(pane, 300, 100);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Exercise 8");
        primaryStage.show();

        scene.setOnMouseReleased(e -> pane.getChildren().clear());

        scene.setOnMouseClicked(e -> {
            showCoordinates(pane, text, e);
        });

        scene.setOnMousePressed(e -> {
            showCoordinates(pane, text, e);
        });


    }

    private void showCoordinates(Pane pane, Text text, MouseEvent e) {
        text.setText("(" + e.getX() + ", " + e.getY() + ")");
        text.setX(e.getX());
        text.setY(e.getY());
        if (!pane.getChildren().contains(text))
            pane.getChildren().add(text);
    }
}

Он должен:

отображать положение мыши при нажатии кнопки мыши (см. Рис. 15.28a), а другой отображает положение мыши при нажатии кнопки мыши и перестает отображать ее при отпускании кнопки мыши.

Но моя лямбда не работает:

scene.setOnMouseReleased(e -> pane.getChildren().clear());

Это просто ничего не делает. Когда я изменил его на scene.setOnMouseReleased(e -> text.setText("")); Это тоже ничего не делает. Но когда я использую scene.setOnMouseReleased(e -> System.out.println("0"));, это работает.

1 Ответ

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

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

scene.setOnMouseReleased(e -> Platform.runLater(() -> pane.getChildren().clear()));

https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater - java .lang .Runnable-

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