Gia*_*olo 2 java javafx listener
我是JavaFX上的新手,我需要以Label某种方式绑定a的visible属性,如果它表示的值达到0,则Label应该是不可见的.此外,当有界integerProperty值发生变化时,需要更新它.
这是我的代码:
@FXML
private Label kingRewardLabel;
// many other stuff between
IntegerProperty kingBonus = mainApp.getLocalModel().getMap().kingBonus();
kingBonus.addListener((observable, oldValue, newValue) -> {
if (newValue.equals(0)) {
kingRewardLabel.setVisible(false);
} else {
kingRewardLabel.setText(String.valueOf(newValue.intValue()));
}
});
// testing the listener
kingBonus.setValue(25);
Run Code Online (Sandbox Code Playgroud)
我已经尝试调试一点但是一切看起来都很好,没有错误,没有异常抛出,只是监听器不起作用,或者至少没有像我期望的那样,因为Label仍然显示默认文本"Label",而不是"25 "
您可以使用简单的绑定来实现此目的:
kingRewardLabel.textProperty().bind(kingBonus.asString());
kingRewardLabel.visibleProperty().bind(kingBonus.greaterThan(0));
Run Code Online (Sandbox Code Playgroud)
在Label kingRewardLabel将要显示的值IntegerProperty kingBonus,并且如果所显示的值大于零它才可见.
但是,如果你想留在听众:
kingBonus.addListener((obs, oldVal, newVal) -> {
kingRewardLabel.setVisible(newVal.intValue() > 0);
kingRewardLabel.setText(newVal.toString());
});
Run Code Online (Sandbox Code Playgroud)
这与问题中的听众几乎相同,但在这种情况下,如果Label变得不可见,它将永远不会再次变为可见,因为kingRewardLabel.setVisible(true)从未调用过.
最后,回答你关于听众为何"不工作"的问题 - 可能有两个原因:
1)的Label,则显示未在其中的一个Label存储在kingRewardLabel
2)在您调用时kingBonus.setValue(25);,存储的值kingBonus已经是25,将不会触发更改的事件,因此根本不执行侦听器.
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |