是仅一次或多次添加变更侦听器

时间:2019-01-10 13:54:47

标签: javafx javafx-8 changelistener

我试图在javafx8中创建一个媒体播放器,为此,我创建了一个按钮并将其设置为onAction,以将更改侦听器添加到舞台全屏属性,如果不是,则使舞台全屏,然后退出全屏如果已经存在。

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 :(得分:0)

每次调用setFullScreen时,您都会创建一个 new ChangeListener并将其注册到属性中。因此,您并不是每次都添加“ this” ChangeListener,而是每次都添加不同 ChangeListener

即使您每次都将 same ChangeListener传递给addListener,它仍然会被多次添加。从ObservableValue.addListener(ChangeListener)强调我的)的文档中:

  

添加一个ChangeListener,每当ObservableValue的值更改时,就会收到通知。 如果多次添加同一个侦听器,则将多次收到通知。也就是说,不会进行检查以确保唯一性。