在侦听器执行时删除侦听器

时间:2017-09-27 22:11:13

标签: javafx-8

我有一个特殊情况,我想在可见属性中添加一个侦听器,然后在该属性不再可见时删除侦听器。我只希望听众开一次然后被删除。

ChangeListener<Boolean> listener= (obs, ov, nv) -> {
    if(!nv){
        //do my processing
        node.visibleProperty().removeListener(listener);                    }
        }
    };
node.visibleProperty().addListener(listener);

然而,它告诉我可能没有初始化变量监听器。如果我尝试将其设为null,然后创建它,则会抱怨它不是最终的

这可能吗?

1 个答案:

答案 0 :(得分:5)

您可以使listener成为实例变量而不是局部变量,或者您可以使用匿名内部类(您可以使用关键字this来引用自身):< / p>

ChangeListener<Boolean> listener = new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> obs, Boolean ov, Boolean nv)  {
        if (! nv) {
            node.visibleProperty().removeListener(this);
        }
    }
};
node.visibleProperty().addListener(listener);