【问题标题】:Javafx Datepicker validationJavafx 日期选择器验证
【发布时间】:2015-02-10 13:12:02
【问题描述】:

我们尝试验证 javafx 日期选择器。所以我们使用:

if (fromDatePicker.getValue() == null) {
        sb.append("No valid from date!\n");
    } else {
        System.out.println(fromDatePicker.getValue().toString());
        if (!DateUtil
                .validEnglishDate(fromDatePicker.getValue().toString())) {
            sb.append("No valid from date. Use the format yyyy-MM-dd.\n");
        }
    }

但目前无法使用日期选择器获取无效日期,因为所有无效日期都已更改为起始值。 所以我们问我们是否有可能用 javafx datepicker 得到一个无效的日期?

***** 编辑 *****

示例:我们有以下日期选择器: 日期选择器[2015-05-12] 现在我们在 DatePicker 中输入了“fjdfk”,所以我们有: 日期选择器[fjdfk] 在保存数据时,日期选择器会自动更改为 DatePicker[2015-05-12]

【问题讨论】:

  • 你的问题不是很清楚。 “无效日期”是什么意思? DatePicker.getValue() 将返回 null 或实际的 LocalDate 实例。如果它不为空,toString() 将以特定方式对其进行格式化(javadocs 会告诉您格式)。如果需要,您始终可以使用 DateTimeFormatter 以不同方式格式化结果。
  • 我有同样的用例。 DatePicker.getValue() 不返回 null;它返回以前的值。有什么方法可以拦截 DatePicker 验证(可能使用属性侦听器)?我想向用户显示一条消息,例如“请输入有效日期”。

标签: datepicker javafx-8


【解决方案1】:

您可以使用DatePicker#setConverter(StringConverter<LocalDate>) 来捕获任何解析异常并警告用户。这是一个示例:

public class SecureLocalDateStringConverter extends StringConverter<LocalDate> {
    /**
     * The date pattern that is used for conversion. Change as you wish.
     */
    private static final String DATE_PATTERN = "dd/MM/yyyy";

    /**
    * The date formatter.
    */
    public static final DateTimeFormatter DATE_FORMATTER =
        DateTimeFormatter.ofPattern(DATE_PATTERN);

    private boolean hasParseError = false;

    public boolean hasParseError(){
        return hasParseError;
    }

    @Override
    public String toString(LocalDate localDate) {
       return DATE_FORMATTER.format(localDate);
    }

    @Override
    public LocalDate fromString(String formattedString) {

            try {
                LocalDate date=LocalDate.from(DATE_FORMATTER.parse(formattedString));
                hasParseError=false;
                return date;
            } catch (DateTimeParseException parseExc){
                hasParseError=true;
                return null;
            }
    }

}

在您的控制下,您只需调用 converter#hasParseError()converter 是您使用 DatePicker#setConverter(StringConverter&lt;LocalDate&gt;) 设置的那个

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2022-01-22
    • 2011-02-06
    • 1970-01-01
    • 2015-01-29
    • 2023-03-25
    • 2018-09-28
    • 2021-02-13
    相关资源
    最近更新 更多