带逗号的自定义日期选择器输入文本

Custom Datepicker Input Text with comma

我想在 Javafx8 中为 DatePicker 输入自定义格式。 如果我输入例如“21,2,15” by textinput 我希望日期选择器将本地日期设置为 2015 年 2 月 21 日。 我可以将字符串分成三部分,然后简单地将三个 INT 添加到一个新的本地日期,但是 我如何访问我的输入文本 before/while 按回车键? 第二种可能性:捕获逗号 (,) 并立即将其转换为点 (.),因此在键入“21,2,15”时,它会转换为“21.2.15”,并在按回车后使用此格式,DatePicker 添加 2015- 02-21 作为本地日期。 那么有没有机会输入 "d,m,yy" 的日期?

指定一个 converter for the DatePicker and use an appropriate DateTimeFormatter 来解析和格式化日期。

SSCEE:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;

public class DatePickerWithCustomFormat extends Application {

    @Override
    public void start(Stage primaryStage) {
        DatePicker datePicker = new DatePicker();

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d,M,y");
        datePicker.setConverter(new StringConverter<LocalDate>() {

            @Override
            public String toString(LocalDate date) {
                if (date == null) {
                    return "" ;
                }
                return formatter.format(date);
            }

            @Override
            public LocalDate fromString(String string) {
                if (string == null || string.isEmpty()) {
                    return null ;
                }
                return LocalDate.from(formatter.parse(string));
            }

        });

        datePicker.valueProperty().addListener((obs, oldDate, newDate) -> 
            System.out.println("Selected "+newDate));

        primaryStage.setScene(new Scene(new StackPane(datePicker), 375, 120));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}