当前位置: 首页 > 知识库问答 >
问题:

向javafx datepickerskin添加多个选定日期字段

燕凯旋
2023-03-14

我正在使用JavaFX开发一个日历应用程序。约会的日期通过DatePicker添加到数据库中。约会应从数据库中检索并显示在三个datepicker皮肤中。

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

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

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

谁能给我指出一个如何在datepicker皮肤上添加几天的解决方案,或者一个变通方法或者其他不是JavaFX的工具?

如有任何帮助,我们将不胜感激。

   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个答案

林俊晖
2023-03-14

我想出了一个办法:

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);
 类似资料:
  • 问题内容: 我已经看过了,基本上我已经发现Calendar对象可以使用以下类似方法将1个月添加到指定的日期中: 尽管我不喜欢它在日期为30或31时的行为。如果我将1个月添加到01/31/2012,输出将变为02/29/2012。当我再增加1个月时,它将变为03/29/2012。 无论如何,我是否可以强制2012年2月29日自动变为2012年3月1日? 基本上这就是我想发生的事情: 默认日期:01/

  • 问题内容: 如何在where子句中检查的日期中增加一个月? 例如: 问题答案:

  • 问题内容: 我正在使用Jquery日期选择器,并且我有以下代码,其中当用户选择日期时,下面的字段填充为日期+1 我想限制字段中的日期,该日期不应低于字段中的日期。例如,如果在中选择的日期为,则允许用户选择,日期不得少于, 如何限制日期字段2中的日期选择? 问题答案: 我为您创建了一个jsfiddle。我不是100%肯定,如果它是“万无一失”,但以防止用户手动输入一个日期,你可以设置输入如 目前,我

  • 我使用Jquery日期选择器,我有以下代码,当用户选择日期时,下面的字段填充日期1 我想限制dt2字段中的日期,该字段不应低于dt1字段中的日期。E、 g.如果在dt1中选择的日期为2013年5月1日,则允许用户在2013年5月1日之后选择日期,但不得小于2013年5月2日 如何在日期字段2中限制日期领料?

  • 本文向大家介绍如何在MySQL查询中向datetime字段添加日期?,包括了如何在MySQL查询中向datetime字段添加日期?的使用技巧和注意事项,需要的朋友参考一下 要将日期添加到日期时间字段,请使用DATE_ADD()函数。语法如下- 让我们首先创建一个表- 借助插入当前日期,然后使用date_add()函数添加一天。 要在表格中插入一天,以下是查询- 在select语句的帮助下显示记录。

  • 是否有一种方法可以将时间戳添加到。pm2/logs中的错误日志中? 我注意到命令显示带有时间戳的聚合日志,但查看日志文件时,只有消息和stacktraces没有日期。