Javafx Datepicker验证

And*_*eas 5 datepicker javafx-8

我们尝试验证javafx datepicker。因此我们使用:

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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jul*_*lph 5

您可以使用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;
            }
    }

}
Run Code Online (Sandbox Code Playgroud)

在您的控制下,您只需致电converter#hasParseError()converter成为您设置的那个DatePicker#setConverter(StringConverter<LocalDate>)