首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JavaFX的TableView中定制setCellValueFactory的功能

如何在JavaFX的TableView中定制setCellValueFactory的功能
EN

Stack Overflow用户
提问于 2019-10-17 00:58:35
回答 1查看 283关注 0票数 0

我有一个Kotlin数据类:

代码语言:javascript
运行
复制
data class DataContainer(var descriptor: String = "",
                         var amount: Double = 0.0,
                         val composition: MutableMap<String, Double> = mutableMapOf(),
                         var date: LocalDate = now())

应将此实例作为条目添加到JavaFX TableView中。添加除组合之外的所有内容都符合TableColumn的标准

代码语言:javascript
运行
复制
.setCellValueFactory(new PropertyValueFactory<>())

使用<>中的相关类型和PropertyValueFactory的()中的名称,例如:

代码语言:javascript
运行
复制
tableColumnDC_date.setCellValueFactory(new PropertyValueFactory<DataContainer, LocalDate>("date"));

不幸的是,使用组合(Hash)Map会稍微复杂一些。仅使用上面提到的标准过程,我就会得到非常难看的相关列输出,比如

代码语言:javascript
运行
复制
tableColumnDC_comp.setCellValueFactory(new PropertyValueFactory<DataContainer, HashMap<String, Double>>("composition"));

这就是我想要定制setCellValueFactory方法的原因。

我想生成一个自定义的输出字符串,因为包含"\n“的字符串是在单行中整洁地组织输出的最简单方法。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-17 02:24:52

您可以将任意字符串值放入单元格中,方法是将其包装在setCellValueFactory中创建的ReadOnlyStringWrapper中。它是一个比PropertyValueFactory更好的选择,因为它不使用反射,所以类型安全。

例如,下面的代码将为您提供由换行符分隔的映射中的所有值。

代码语言:javascript
运行
复制
tableColumnDC_comp.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getMap().values().stream().collect(Collectors.joining("\n")));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58418282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档