Прослушиватель изменений добавляется только один раз или много раз

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

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

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


person Hocine Abdellatif    schedule 10.01.2019    source источник


Ответы (1)


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

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

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

person Slaw    schedule 10.01.2019