使用fxml的两个日期选择器

时间:2018-05-02 23:24:12

标签: java javafx fxml

我正在建立图书馆借阅系统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值之前禁用它的日期?

0 个答案:

没有答案