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

如何无需点击确认按钮设置Jfxtras LocalDateTimeTextField的值?

解决LocalDateTimeTextField弹窗关闭时自动应用所选值的问题

我明白你的需求:点击LocalDateTimeTextField弹出选择器后,选择新的日期时间,不用点击确认按钮,只要关闭弹窗(点击外部区域),就自动把选中的值同步到文本框里。针对这个问题,我们可以通过监听弹窗的隐藏事件来实现,下面是具体的解决方法:

核心思路

LocalDateTimeTextField(来自ControlsFX库)内部依赖LocalDateTimePicker组件提供弹窗选择功能。我们可以获取到这个内部的LocalDateTimePicker,然后监听它的弹窗隐藏事件,在弹窗关闭时主动将选中的日期时间设置到文本框中。

代码实现

在你初始化dtSpecificDate的代码后,添加以下逻辑:

// 初始化你的LocalDateTimeTextField
dtSpecificDate = new LocalDateTimeTextField();
dtSpecificDate.withLocalDateTime(LocalDateTime.now());
dtSpecificDate.setMaxWidth(170.0);
dtSpecificDate.setDisable(true); // 注意:如果控件是禁用状态,可能需要调整逻辑确保弹窗能正常弹出
dtSpecificDate.setDateTimeFormatter(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"));
gridRadioGroup.add(dtSpecificDate, 1, 1);

// 获取内部的LocalDateTimePicker组件
LocalDateTimePicker picker = (LocalDateTimePicker) dtSpecificDate.getEditor().getProperties().get("DateTimePicker");

if (picker != null) {
    // 监听弹窗的隐藏事件
    picker.getPopup().setOnHidden(event -> {
        LocalDateTime selectedDateTime = picker.getValue();
        // 确保选中的值不为空,且与当前文本框值不同时再设置
        if (selectedDateTime != null && !selectedDateTime.equals(dtSpecificDate.getLocalDateTime())) {
            dtSpecificDate.setLocalDateTime(selectedDateTime);
        }
    });
}

额外说明

  • 禁用状态的注意事项:你的代码里设置了dtSpecificDate.setDisable(true);,如果控件处于完全禁用状态,弹窗可能无法正常触发。如果需要保持禁用但允许用户通过弹窗选择,可以改为只禁用文本框的手动输入,保留弹窗触发功能。
  • Cancel按钮的行为:默认情况下,点击弹窗的Cancel按钮会重置选中值为文本框原有的值。如果你希望Cancel按钮也应用当前选中的值,可以在setOnHidden事件里直接设置选中值,忽略Cancel的重置逻辑。
  • 替代方案:实时同步:如果你希望用户在弹窗里选择时文本框就实时更新,可以监听picker.valueProperty()的变化:
    if (picker != null) {
        picker.valueProperty().addListener((obs, oldVal, newVal) -> {
            if (newVal != null) {
                dtSpecificDate.setLocalDateTime(newVal);
            }
        });
    }
    

这样就能实现你想要的效果:弹窗关闭时无需点击确认,自动将所选值设置到LocalDateTimeTextField组件中。

内容的提问来源于stack exchange,提问作者drCracker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:07:29