【问题标题】:JavaFX addListener not workingJavaFX addListener 不起作用
【发布时间】:2016-10-24 02:14:09
【问题描述】:

我是 JavaFX 的新手,我需要绑定 Label 的可见属性,如果它表示的值达到 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);

我已经尝试调试了一下,但一切似乎都很好,没有错误,没有抛出异常,只是监听器不起作用,或者至少不像我预期的那样,因为Label 仍然显示默认文本“标签",而不是 "25"

【问题讨论】:

  • 在我看来它应该可以工作。你确定这确实是同一个标签吗?在最后一行之后添加kingRewardLabel.setText("Test") 会发生什么?
  • @sillyfly 我已经测试了它的监听器,它适用于 value !=0 但是当我 setValue(0) 时没有进入监听器,为什么会这样?
  • 如果初始值为 0,则将其设置为 0 不会触发更改。如果设置为 0 以外的值,然后设置为 0,它是否有效?
  • @sillyfly 哦,是的,是的,它有效。我没想到 :)..

标签: java javafx listener


【解决方案1】:

您可以简单地使用bindings 来实现:

kingRewardLabel.textProperty().bind(kingBonus.asString());
kingRewardLabel.visibleProperty().bind(kingBonus.greaterThan(0));

LabelkingRewardLabel 将显示IntegerProperty kingBonus 的值,并且仅当显示的值大于零时才可见。

但是,如果您想留在听众身边:

kingBonus.addListener((obs, oldVal, newVal) -> {
    kingRewardLabel.setVisible(newVal.intValue() > 0);
    kingRewardLabel.setText(newVal.toString());
});

这与问题中的听众几乎相同,但在这种情况下,如果 Label 变得不可见,它将永远不会再次可见,因为永远不会调用 kingRewardLabel.setVisible(true)

最后,回答您关于为什么监听器“不工作”的问题 - 可能有两个原因:

1)显示的Label不是kingRewardLabel中存储的Label

2) 当你调用kingBonus.setValue(25);时,kingBonus中存储的值已经是25,不会触发changed事件,所以监听器根本不会被执行。

【讨论】:

    【解决方案2】:

    你可以这样:

     kingBonus.addListener(l -> {
                int value = kingBonus.getValue().intValue();
                System.out.println("Entered listener for value:" + value);
                if (value == 0)
                    kingRewardLabel.setVisible(false);
                else
                    kingRewardLabel.setText(value+"");  
            });
        });
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多