如何从TableView选中单元格中获取DatePicker的值
解决方案
方案一:修改数据模型(推荐)
你的核心问题是Booking类的Date属性用了String类型存储日期,而JavaFX的DatePicker需要LocalDate类型值。最规范的做法是直接修正数据模型:
- 修改
Booking类,将Date字段的类型从String改为LocalDate,同时确保对应的getter方法返回LocalDate:
public class Booking { // 其他属性... private LocalDate date; public LocalDate getDate() { return date; } // 对应的setter方法 public void setDate(LocalDate date) { this.date = date; } }
- 调整Controller中TableColumn的泛型定义:
// 把<String>改成<LocalDate> @FXML public TableColumn<Booking, LocalDate> tableColDate;
- 回显代码直接赋值,无需转换:
// 去掉toString(),直接获取LocalDate类型值 beginDate.setValue(tableColDate.getCellData(index));
这样做既符合Java日期处理的规范,也避免了字符串解析可能带来的格式错误。
方案二:字符串转LocalDate(无法修改模型时使用)
如果因为数据库或其他原因不能修改Booking类的Date属性类型,需要将存储的日期字符串解析为LocalDate:
- 先确认数据库中存储的日期格式(比如
yyyy-MM-dd、dd.MM.yyyy等),使用DateTimeFormatter进行解析:
@FXML void getSelected(MouseEvent event) { index = tableViewBooking.getSelectionModel().getSelectedIndex(); if (index <= -1) { return; } beginTime.setText(tableColSTime.getCellData(index).toString()); endTime.setText(tableColETime.getCellData(index).toString()); // 解析字符串为LocalDate,这里假设日期格式是yyyy-MM-dd,根据实际情况调整 String dateStr = tableColDate.getCellData(index); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate localDate = LocalDate.parse(dateStr, formatter); beginDate.setValue(localDate); reminderDesc.setText(tableColName.getCellData(index).toString()); }
注意:必须保证字符串格式和DateTimeFormatter的格式完全匹配,否则会抛出DateTimeParseException,建议添加异常处理。
内容的提问来源于stack exchange,提问作者Cicada3301
相关产品推荐
相关产品推荐

