2017-05-29 78 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你應該紀念的答案正確的,如果它回答您的問題 –