JavaFX TableView Integer 不显示,而 String 项目是

Posted

技术标签:

【中文标题】JavaFX TableView Integer 不显示,而 String 项目是【英文标题】:JavaFX TableView Integer not displaying while String items are 【发布时间】:2021-12-30 02:24:21 【问题描述】:

我有一个包含这些列的程序:

showNameColumn.setCellValueFactory(new PropertyValueFactory<Show, String>("ShowName"));
epsWatchedColumn.setCellValueFactory(new PropertyValueFactory<Show, Integer>("EpsWatched;"));
showStatusColumn.setCellValueFactory(new PropertyValueFactory<Show, String>("ShowStatus"));

getter 被调用 getShowName()、getEpsWatched() 和 getShowStatus() 获取变量 showName、epsWatched 和 showStatus。

这里有什么问题?显示字符串,但不显示整数。

【问题讨论】:

@jewelsea 而不是 int 没有做任何事情(不知道为什么会这样,它是一个包装类)。另外我将如何为此写一个lamba?我以前从未使用过它们(我知道它们,只是没有使用过它们),而且您列出的示例线程对我来说有点难以理解。我得到: showNameColumn.setCellValueFactory(cellData -> cellData.getValue().getShowName());当我试图弄乱它时,但这(可能很明显)给出了无法从 String 转换为 ObervableValue. 的类型不匹配错误 这是问题,哈哈,你能把它写成答案,这样我就可以相信你回答了这个问题? Integer vs int 只是一个猜测。大多数时候你可以依赖自动装箱行为,在这种情况下,我想这并不重要。但是 int 和 Integer 不是一回事,如果不需要的话,我不喜欢相信自动装箱(只是个人喜好)。 【参考方案1】:

你有一个“;”在传递给属性值工厂的字符串中,它不应该存在。

这是错误的:

new PropertyValueFactory<Show, Integer>("EpsWatched;")

PropertyValueFactory 查找字符串和属性名称应遵循 Java bean 命名约定。有关详细信息,请参阅:

Javafx PropertyValueFactory not populating Tableview

通常,我会将问题作为上述问题的副本来结束,但是,提问者要求提供具体答案并有一些其他问题,因此此答案直接解决了这些问题。

建议使用 lambda 而不是 PropertyValueFactory,因为任何错误都会被编译器准确检测和报告,而不是在运行时出现故障。如需全面分析,请参阅:

Java: setCellValuefactory; Lambda vs. PropertyValueFactory; advantages/disadvantages

我将如何为此写一个lamba?

在您的模型类中声明属性并为其提供访问器:

public class Show 
    private final IntegerProperty numEpisodes = new SimpleIntegerProperty();
    public final IntegerProperty numEpisodesProperty() 
        return numEpisodes;
    

使用 lambda 中的属性访问器来定义单元格值工厂:

TableColumn<Show, Integer> numEpisodesCol = new TableColumn<>();
numEpisodesCol.setCellValueFactory(
    data -> data.getValue().numEpisodesProperty().asObject()
);

另见:

Converting Integer to ObservableValue<Integer> in javafx

【讨论】:

就是这样,谢谢

以上是关于JavaFX TableView Integer 不显示,而 String 项目是的主要内容,如果未能解决你的问题,请参考以下文章

无法将值插入 tableview - JavaFx

JAVAFX的TableView基本用法

JAVAFX的TableView基本用法

JavaFX 9/10 不再可能覆盖 TableView.resizeColumnToFitContent

没有对象的 TableView 中的组合框 - JavaFX

在 CSS (JavaFX) 中为 TableView 设置样式