我正在建立图书馆借阅系统GUI,使用javafx& FXML。我有两个日期选择器,贷款/开始日期(fromDate)和返回/结束日期(toDate),它表示借书的时间表。
我想做的是;
fromDate可以设置为当前日期之后的任何日期。 (包括今天的日期)
toDate可以设置为fromDate之后的任何日期。
所以借出的日期不能在今天之前的日期开始,退还图书的日期是在它的开始日期之后。
这是我的代码:
LibraryController.java
public void initialize(URL location, ResourceBundle resources) {
fromDate.setValue(LocalDate.now());
toDate.setValue(fromDate.getValue().plusDays(1));
Callback<DatePicker, DateCell> dayCellFactory = fromDate -> new DateCell()
{
@Override
public void updateItem(LocalDate item, boolean empty)
{
super.updateItem(item, empty);
if(item.isBefore(LocalDate.now()))
{
setDisable(true);
setStyle("-fx-background-color: #ffc0cb;");
}
}
};
Callback<DatePicker, DateCell> dayCellFactory2 = toDate -> new DateCell()
{
@Override
public void updateItem(LocalDate item, boolean empty)
{
super.updateItem(item, empty);
if(item.isBefore(fromDate.getValue().plusDays(1)))
{
setDisable(true);
setStyle("-fx-background-color: #ffc0cb;");
}
}
};
fromDate.setDayCellFactory(dayCellFactory);
toDate.setDayCellFactory(dayCellFactory2);
}
LibraryLoanManagementMain.fxml
<AnchorPane>
<GridPane>
<children>
<DatePicker fx:id="fromDate" prefHeight="25.0" prefWidth="180.0" GridPane.columnIndex="1" />
<DatePicker fx:id="toDate" prefHeight="25.0" prefWidth="180.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
</children>
</GridPane>
</AnchorPane>
然后从main方法中的fxml文件加载根布局。
当我删除dayCellFactory2时,代码工作正常。 GUI与dayCellFactory2一起使用,但会抛出许多错误。抛出的异常是
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
问题在于toDate
和dayCellFactory2。如何修复错误并使其正常工作,在选定的fromDate
值之前禁用它的日期?