прослушиватель изменений добавляется только один раз или много раз - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать медиаплеер в javafx8, и для этого я создал кнопку и установил ее на Action, чтобы добавить прослушиватель изменения в полноэкранное свойство stage и сделать сцену полноэкранной, если это не так, и выйти из полноэкранного режима. если уже.

public void setFullScreen(ActionEven event) {
    Stage stage = ((Stage) containerBorderPane.getScene().getWindow());
    stage.fullScreenProperty().addListener((observable, oldValue, newValue) -> 
            setUpMenuBar(stage.isFullScreen())
    );
    stage.setFullScreen(!stage.isFullScreen());
}

этот метод вызывается каждый раз, когда я нажимаю кнопку, поэтому этот «Изменить прослушиватель» добавляется в fullScreenProperty несколько раз или только один раз?

1 Ответ

0 голосов
/ 10 января 2019

Каждый раз, когда вызывается setFullScreen, вы создаете новый ChangeListener и регистрируете его в свойстве. Таким образом, вы не добавляете «this» ChangeListener каждый раз, а разные ChangeListener каждый раз.

Даже если вы передали один и тот же ChangeListener на addListener каждый раз, он все равно будет добавлен несколько раз. Из документации ObservableValue.addListener(ChangeListener) ( упор мой):

Добавляет ChangeListener, который будет уведомляться всякий раз, когда значение ObservableValue изменяется. Если один и тот же слушатель добавлен более одного раза, он будет уведомлен более одного раза. То есть проверка на уникальность не производится.

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