JavaFX TableView时长格式化:整数秒转分秒字符串显示
解决方案:自定义TableCell格式化显示
你完全不用修改Model类,只需要给你的length列设置一个自定义的CellFactory,负责把秒数转换成分秒格式的字符串就可以了。CellValueFactory依然负责从Model里获取原始的Integer类型秒数,而CellFactory专门处理显示逻辑,完美契合你的需求。
具体代码修改如下:
public void initialize() { ... length.setCellValueFactory(new PropertyValueFactory<>("length")); // 新增这段代码,自定义单元格显示格式 length.setCellFactory(column -> new TableCell<Model, Integer>() { @Override protected void updateItem(Integer seconds, boolean empty) { super.updateItem(seconds, empty); // 处理空单元格或null数据的情况 if (empty || seconds == null) { setText(null); } else { // 计算分钟和秒数,格式化输出(秒数不足两位补0) int minutes = seconds / 60; int remainingSeconds = seconds % 60; setText(String.format("%d:%02d", minutes, remainingSeconds)); } } }); table.setItems(database.getAllModels()); }
代码说明:
updateItem方法是TableCell的核心方法,每次单元格数据更新时都会调用- 先判断空值情况,避免空指针异常
- 用整数除法
seconds / 60得到分钟数,取余seconds % 60得到剩余秒数 String.format("%d:%02d", ...)确保秒数始终是两位数字,比如7秒会显示成0:07,70秒显示成1:10,格式更统一规范
这样修改后,你的TableView就能完美显示分秒格式的时长,而且完全不需要改动Model类的代码~
内容的提问来源于stack exchange,提问作者fangio
相关产品推荐
相关产品推荐

