如何在JavaFx8中的Datepicker Calander中设置最小和最大日期?

时间:2016-03-10 04:00:09

标签: javafx-8

请帮忙。

如何在javafx8中设置日期选择器日历中的最小和最大日期?

2 个答案:

答案 0 :(得分:1)

可以通过在dayCellFactory上禁用这些日期来限制用户选择的日期,并将这些日期范围设置为DatePicker,可以找到官方文档here,这是一个示例:

DatePicker myDatePicker = new DatePicker(); // This DatePicker is shown to user
DatePicker maxDate = new DatePicker(); // DatePicker, used to define max date available, you can also create another for minimum date
maxDate.setValue(LocalDate.of(2015, Month.JANUARY, 1)); // Max date available will be 2015-01-01
final Callback<DatePicker, DateCell> dayCellFactory;

dayCellFactory = (final DatePicker datePicker) -> new DateCell() {
    @Override
    public void updateItem(LocalDate item, boolean empty) {
        super.updateItem(item, empty);
        if (item.isAfter(maxDate.getValue())) { //Disable all dates after required date
            setDisable(true);
            setStyle("-fx-background-color: #ffc0cb;"); //To set background on different color
        }
    }
};
//Finally, we just need to update our DatePicker cell factory as follow:
myDatePicker.setDayCellFactory(dayCellFactory);

现在myDatePicker将不允许用户在2015-01-01之后选择日期(记住,日期将显示但无法选择),在这里您还可以为最短日期创建另一个临时datePicker来设置可用日期范围,顺便说一句,这些代码必须放在java控制器的初始化方法

答案 1 :(得分:1)

或者为什么不

minDate = LocalDate.of(1989, 4, 16);
maxDate = LocalDate.now();
datePicker.setDayCellFactory(d ->
           new DateCell() {
               @Override public void updateItem(LocalDate item, boolean empty) {
                   super.updateItem(item, empty);
                   setDisable(item.isAfter(maxDate) || item.isBefore(minDate);
               }});

无需创建额外的日期选择器来存储最长日期。