проблема с исключением определенных дней из элемента управления DatePicker - PullRequest
0 голосов
/ 27 декабря 2018

Вот мой код, вот как это должно работать

  1. Слушатель слушает, что помещается в текстовое поле VIN, и читает эти данные
  2. Я перебираю список CarFx, если номер VINВведенный мной номер совпадает с номером вин в моем списке арендных ставок. Программа начинает проверять, какие даты недоступны для аренды
  3. Я добавляю в свой список недоступные даты
  4. Исключая из DatePicker вышеУпомянутые дни

Что я делаю не так?

       List<LocalDate> unavailableDates = new ArrayList<>();
       unavailableDates.add(LocalDate.parse("2018-12-31")); //for example

        vinTextField.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {

            System.out.println(" Text Changed to  " + newValue + ")\n");

        }

    });

    for (CarFx lcs : carFxList) {

        if (lcs.getVin().equals(vinTextField.getText())) {

            LocalDate da = lcs.getReleaseDate();
            int nr = lcs.getDays(); // number of days for which car is reserved

            for (int i = 1; i < nr; i++) {

                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy");
                unavailableDates.add(da);
                da.plusDays(i);
            }

        }

    }

    releaseDatePicker.setDayCellFactory(picker -> new DateCell() {
        @Override
        public void updateItem(LocalDate date, boolean empty) {
            super.updateItem(date, empty);
            LocalDate today = LocalDate.now();

            setDisable(empty || date.compareTo(today) < 0); // I am also excluding all days in the past
            if (date != null && !empty) {

                // Compare date to List
                if (unavailableDates.contains(date)) {
                    setDisable(true);

                }
            }
        }
    });

    this.releaseDatePicker.valueProperty()
            .bindBidirectional(this.carModel.getCarFxObjectProperty().releaseDateProperty());

1 Ответ

0 голосов
/ 29 декабря 2018

Возможно, следующий 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();
    }
}

Результат:

screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...