如何将ObjectBinding<BigDecimal>与Formatter绑定到Label上?

问题描述 投票:1回答:1

我有一个 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实现绑定(尽可能不使用监听器),那就更好了。谢谢你。

javafx binding formatter
1个回答
1
投票

在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);

如果有更雄辩的方法,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.