【问题标题】:Adding multiple selected date fields to a javafx datepickerskin将多个选定的日期字段添加到 javafx datepickerskin
【发布时间】:2017-05-21 00:46:13
【问题描述】:

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

我希望日期选择器皮肤显示多个选定的日期,在各自的日期/日期显示该月的所有约会。

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

我已经进行了很多谷歌搜索,但无法找到在 javafx 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;" : "");
                }
            };
        }
    });

【问题讨论】:

    标签: javafx datepicker


    【解决方案1】:

    我想出了一个办法:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2013-11-16
      • 2014-06-29
      相关资源
      最近更新 更多