如何使用格式化程序绑定 属性
How to bind property using a formatter
我有一个标签和一个双 属性。我想输出带有后缀“$”的值,i。 e. “200.50 美元”。我如何使用 JavaFX 做到这一点?我考虑过这样使用绑定:
@FXML Label label;
DoubleProperty value;
...
Bindings.bindBidirectional( label.textProperty(), valueProperty(), NumberFormat.getInstance());
但还没有找到将“$”附加到文本的方法。
非常感谢您的帮助!
您可以使用
将其连接到值
label.textProperty().bind(Bindings.concat(value).concat("$"));
像这样的东西应该有用。
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 的输入。
感谢 Itachi Uchiha 和 ANDY,我找到了正确的答案。我将不得不像这样使用 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());
我有一个标签和一个双 属性。我想输出带有后缀“$”的值,i。 e. “200.50 美元”。我如何使用 JavaFX 做到这一点?我考虑过这样使用绑定:
@FXML Label label;
DoubleProperty value;
...
Bindings.bindBidirectional( label.textProperty(), valueProperty(), NumberFormat.getInstance());
但还没有找到将“$”附加到文本的方法。
非常感谢您的帮助!
您可以使用
将其连接到值label.textProperty().bind(Bindings.concat(value).concat("$"));
像这样的东西应该有用。
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 的输入。
感谢 Itachi Uchiha 和 ANDY,我找到了正确的答案。我将不得不像这样使用 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());