Возможно, следующий MCVE приведет вас в правильном направлении.Я рекомендую создать список недоступных дат и сравнить этот список в вашем DateCellFactory
.
. Этот List
может быть получен, например, из вашего CarFx
объекта (каждый автомобиль содержит список дат, которыми он является.недоступен для аренды).
Ваш вопрос не содержит достаточного количества кода для полного решения, поскольку доступно очень мало контекста.
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class DateCellsSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Simple interface
VBox root = new VBox(5);
root.setPadding(new Insets(10));
root.setAlignment(Pos.CENTER);
// Create a list of Dates that are unavailable (this list can be updated as needed)
List<LocalDate> unavailableDates = new ArrayList<>();
unavailableDates.add(LocalDate.parse("2018-12-30"));
unavailableDates.add(LocalDate.parse("2018-12-31"));
unavailableDates.add(LocalDate.parse("2019-01-01"));
unavailableDates.add(LocalDate.parse("2019-01-02"));
unavailableDates.add(LocalDate.parse("2019-01-03"));
unavailableDates.add(LocalDate.parse("2019-01-04"));
unavailableDates.add(LocalDate.parse("2019-01-05"));
// Create our DatePicker
DatePicker datePicker = new DatePicker();
// Set the DatePicker to only allow selection of dates NOT in the unavailableDates List
datePicker.setDayCellFactory(picker -> new DateCell() {
@Override
public void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
if (date != null && !empty) {
// Compare date to List
if (unavailableDates.contains(date)) {
setDisable(true);
}
}
}
});
root.getChildren().add(datePicker);
// Show the Stage
primaryStage.setWidth(300);
primaryStage.setHeight(300);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}
Результат: