我有一个特殊情况,我想在可见属性中添加一个侦听器,然后在该属性不再可见时删除侦听器。我只希望听众开一次然后被删除。
即
ChangeListener<Boolean> listener= (obs, ov, nv) -> {
if(!nv){
//do my processing
node.visibleProperty().removeListener(listener); }
}
};
node.visibleProperty().addListener(listener);
然而,它告诉我可能没有初始化变量监听器。如果我尝试将其设为null,然后创建它,则会抱怨它不是最终的
这可能吗?
答案 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);