【问题标题】:JavaFX TableView Integer not displaying while String items areJavaFX TableView Integer 不显示,而 String 项目是
【发布时间】: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 不是一回事,如果不需要的话,我不喜欢相信自动装箱(只是个人喜好)。

标签: java javafx tableview


【解决方案1】:

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

这是错误的:

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

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

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

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

我将如何为此写一个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()
);

另见:

【讨论】:

  • 就是这样,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2018-11-13
  • 2016-09-02
  • 2014-07-28
  • 2015-12-15
  • 1970-01-01
  • 2013-04-20
相关资源
最近更新 更多