如何使用格式化程序绑定属性

时间:2015-03-13 08:51:28

标签: binding javafx

我有一个标签和一个双重属性。我想用后缀“$”,i输出值。即“200.50 $”。如何使用JavaFX执行此操作?我想过像这样使用绑定:

@FXML Label label;
DoubleProperty value;
...
Bindings.bindBidirectional( label.textProperty(), valueProperty(), NumberFormat.getInstance());

但是还没有办法在文本中加上“$”。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

这样的事情应该有效。

Bindings.format("%.2f $", myDoubleProperty.getValue());

现在你可以绑定它

 label.textProperty.bind(Bindings.format("%.2f $", myDoubleProperty.getValue());

如果你想使用NumberFormat实例,只需用它格式化myDoubleProperty的值。

NumberFormat formatter = NumberFormat.getInstance();
formatter.setSomething();
formatter.format(myDoubleProperty.getValue());

现在将它添加到我们的Bindings.format。

编辑:

包含ItachiUchiha的输入。

答案 1 :(得分:2)

感谢ItachiUchiha和NDY,我找到了正确的答案。我将不得不像这样使用StringConverter:

  public class MoneyStringConverter extends StringConverter<Number> {

    String postFix = " $";
    NumberFormat formatter = numberFormatInteger; 

    @Override
    public String toString(Number value) {

        return formatter.format( value) + postFix;

    }

    @Override
    public Number fromString(String text) {

      try {

        // we don't have to check for the symbol because the NumberFormat is lenient, ie 123abc would result in the value 123
        return formatter.parse( text);

      } catch( ParseException e) {
        throw new RuntimeException( e);
      }

    }

  }

然后我可以在绑定中使用它:

Bindings.bindBidirectional( label.textProperty(), valueProperty(), new MoneyStringConverter());

答案 2 :(得分:0)

您可以使用

将其连接到值
label.textProperty().bind(Bindings.concat(value).concat("$"));