将多个选定的日期字段添加到javafx datepickerskin

时间:2017-05-21 00:46:13

标签: javafx datepicker

我正在使用javafx处理日历应用程序。约会的日期通过datepicker添加到数据库中。应从数据库中检索约会并在三个日期选择器皮肤内显示。

Calendar app with one datepicker and three skins

我希望datepicker皮肤显示多个选定日期,显示其各自日期/日期的月份的所有约会。

下面的代码实现了在datepicker中显示几天的约会,但这没有多大帮助,因为选择后关闭了datepicker下拉列表。

我已经做了很多谷歌搜索但是却找不到在javafx datepicker皮肤中显示多个选定日期的方法。

有人能指出我如何为datepicker皮肤添加几天的解决方案,或者可能是解决方法或其他不是javafx的工具?

任何帮助将不胜感激。

在我已有的代码下面。

这是datepicker的工作代码:

   private void datepickerSetDate() throws ParseException {


    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    String dateInString = "2017-05-27";
    Date date = formatter.parse(dateInString);

    SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd");
    String dateInString2 = "2017-05-29";
    Date date2 = formatter2.parse(dateInString2);


    Instant instant = date.toInstant();
    LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();

    Instant instant2 = date2.toInstant();
    LocalDate localDate2 = instant2.atZone(ZoneId.systemDefault()).toLocalDate();

    ObservableList<LocalDate> selectedDates = FXCollections.observableArrayList();
    selectedDates.addAll(localDate , localDate2);

    datePicker_1.setOnAction(event -> selectedDates.add(datePicker_1.getValue()));

    datePicker_1.setDayCellFactory(new Callback<DatePicker, DateCell>() {
        @Override
        public DateCell call(DatePicker param) {
            return new DateCell() {
                @Override
                public void updateItem(LocalDate item, boolean empty) {
                    super.updateItem(item, empty);
                    boolean alreadySelected = selectedDates.contains(item);
                    setDisable(alreadySelected);
                    setStyle(alreadySelected ? "-fx-background-color: lightblue;" : "");
                }
            };
        }
    });

1 个答案:

答案 0 :(得分:0)

我找到了一种方法:

dp.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle (ActionEvent event) {
            LocalDate date  = dp.getValue();
        }
    });

    Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() {

        public DateCell call (final DatePicker datePicker ) {

            return new DateCell() {

                @Override
                public void updateItem (LocalDate item , boolean empty) {

                    super.updateItem(item, empty);
                    DayOfWeek day = DayOfWeek.from(item);
                    if (day == DayOfWeek.SATURDAY || day == DayOfWeek.SUNDAY) {

                        this.setStyle("-fx-background-color: lightblue");

                    }                        

                    LocalDate today = LocalDate.now();

                    if (item.isEqual(today)) {
                        this.setStyle("-fx-background-color: green");

                    }                                        

                }

            };

        }


    };

    dp.setDayCellFactory(dayCellFactory);

enter image description here