我有一个 ObservableList<Items> items
并能计算出各项目价格的总和(BigDecimal
),并以如下方式将结果绑定到标签的文本属性。
totalSumLabel.textProperty().bind(
Bindings.createObjectBinding(() -> items.stream()
.map(item -> item.getPrice())
.reduce(BigDecimal.ZERO, BigDecimal::add),
items)
.asString("%.2f €"));
但现在我想使用一个formatter (DecimalFormat
),而不是 asString("%.2f €")
方法更灵活,但我不知道如何实现。如果有人能告诉我如何用formatter实现绑定(尽可能不使用监听器),那就更好了。谢谢你。
在Slaw评论的帮助下,我找到了下面的工作方案。
ObjectBinding<BigDecimal> totalSumObjectBinding = Bindings.createObjectBinding(() ->
items.stream()
.map(item -> item.getPrice())
.reduce(BigDecimal.ZERO, BigDecimal::add),
items);
DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.getDefault());
StringBinding totalSumStringBinding = Bindings.createStringBinding(() ->
formatter.format(totalSumObjectBinding.getValue()), totalSumObjectBinding);
totalSumLabel.textProperty().bind(totalSumStringBinding);
如果有更雄辩的方法,请告诉我。