这是我的代码,这就是它的工作方式
我做错了什么?
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());
答案 0 :(得分:0)
以下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();
}
}
结果: