2017-05-29 77 views
0

我正在处理日历应用程序,该应用程序将从ArrayList中检索日期值,该日期值从SQL数据库中检索字符串值。格式化是通过一天细胞工厂实现的。来自ArrayList的javafx格式单元格

问题是,不仅ArrayList的日期格式化,整个月的单元格都有绿色背景。任何人有什么我做错了什么暗示?

我一年前开始使用Python进行编程,而且我现在只使用JavaFx几个月,所以我对ArrayLists和cell工厂的经验仍然非常有限。

任何帮助将不胜感激。以下是我迄今为止....

ObservableList<LocalDate> dates = FXCollections.observableArrayList(); 

     LocalDate date_1 = LocalDate.parse("2017-05-20"); 
     LocalDate date_2 = LocalDate.parse ("2017-05-18"); 
     dates.add(date_1); 
     dates.add(date_2); 

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

        for (LocalDate ldt : dates) { 
         this.setStyle("-fx-background-color: green"); 
         this.setTextFill(Color.BLACK); 
         this.setTooltip(new Tooltip("hello")); 

         } 

        }; 

      }; 

     }; 

    }; 


    dp.setDayCellFactory(dayCellFactory); 

    DatePickerSkin datePickerSkin = new DatePickerSkin(dp); 
    Node popupContent = datePickerSkin.getPopupContent(); 
    calendar_pane_1.getChildren().add(popupContent); 

回答

2

您单元的updateItem(...)方法:

public void updateItem (LocalDate item , boolean empty) { 
    super.updateItem(item, empty); 

    for (LocalDate ldt : dates) { 
     this.setStyle("-fx-background-color: green"); 
     this.setTextFill(Color.BLACK); 
     this.setTooltip(new Tooltip("hello")); 

    } 

} 

设置单元格的样式,以便它有一个绿色的背景,无论价值传递给方法item。 (它甚至做了两次,因为dates列表中有两个元素。)很明显,每个单元格都会有一个绿色背景。

你没有在问题中说明它,但我猜你只想让列表中的项目具有样式化的背景。您需要:

public void updateItem (LocalDate item , boolean empty) { 
    super.updateItem(item, empty); 

    if (item != null && dates.contains(item)) { 
     this.setStyle("-fx-background-color: green; -fx-text-fill: black ;"); 
     this.setTooltip(new Tooltip("hello")); 

    } else { 
     this.setStyle(""); 
     this.setTooltip(null); 
    } 

} 
+0

James_D,千恩万谢,完美的解决方案,一如既往..... – rainer

+0

@Rainer你应该纪念的答案正确的,如果它回答您的问题 –