You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从TableView选中单元格中获取DatePicker的值

解决方案

方案一:修改数据模型(推荐)

你的核心问题是Booking类的Date属性用了String类型存储日期,而JavaFX的DatePicker需要LocalDate类型值。最规范的做法是直接修正数据模型:

  1. 修改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;
    }
}
  1. 调整Controller中TableColumn的泛型定义:
// 把<String>改成<LocalDate>
@FXML
public TableColumn<Booking, LocalDate> tableColDate;
  1. 回显代码直接赋值,无需转换:
// 去掉toString(),直接获取LocalDate类型值
beginDate.setValue(tableColDate.getCellData(index));

这样做既符合Java日期处理的规范,也避免了字符串解析可能带来的格式错误。

方案二:字符串转LocalDate(无法修改模型时使用)

如果因为数据库或其他原因不能修改Booking类的Date属性类型,需要将存储的日期字符串解析为LocalDate:

  1. 先确认数据库中存储的日期格式(比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:30:51