我有一个特殊的情况,我想向可见属性添加一个侦听器,然后在该属性不再可见时将其删除。我只希望听众触发一次然后将其删除。
即
ChangeListener<Boolean> listener= (obs, ov, nv) -> {
if(!nv){
//do my processing
node.visibleProperty().removeListener(listener); }
}
};
node.visibleProperty().addListener(listener);
Run Code Online (Sandbox Code Playgroud)
但是,它告诉我变量侦听器可能尚未初始化。如果我尝试将其设置为null,然后创建它,它会抱怨说它实际上不是最终的
这可能吗?
您可以使listener实例变量而不是局部变量,或者可以使用匿名内部类(在其中可以使用关键字this引用自身):
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |