javafx - 如何绑定 ObjectBinding到带有格式化程序的标签?
问题描述
我有一个ObservableList<Items> items
并且可以计算项目价格(BigDecimal
)的总和,并通过以下方式将结果绑定到标签文本属性:
totalSumLabel.textProperty().bind(
Bindings.createObjectBinding(() -> items.stream()
.map(item -> item.getPrice())
.reduce(BigDecimal.ZERO, BigDecimal::add),
items)
.asString("%.2f €"));
但现在我想使用格式化程序(DecimalFormat
)而不是asString("%.2f €")
更灵活的方法,我不知道如何实现这一点。如果有人可以展示如何使用格式化程序实现绑定(尽可能不使用侦听器),那就太好了。谢谢你。
解决方案
在 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);
如果有更雄辩的方法,请告诉我。
推荐阅读
- python - 在 Python 3 中使用全局变量进行图像处理的线程似乎效率不高
- google-apps-script - 在 Intranet 仪表板上显示 adwords 统计信息
- twitter-bootstrap - 调整大小时将侧导航栏变成顶部栏
- javascript - lodash 中的值方法未按预期工作
- reactjs - Plotly fx.hover 在移动设备上失败
- batch-file - 无论用户是否登录,如何强制启动程序的托盘图标从计划任务集中显示以运行?
- react-native - 无法解析模块(Expo、React Native)
- php - 如何使用 post_type、posts_per_page 和 ID 获取自定义类型的帖子过滤
- google-chrome - 您不能使用 Marketplace SDK 中的取消发布功能
- kubernetes - 使用 NetworkPolicy 将“kube-system”命名空间列入白名单