我正在尝试将valueProperty
的{{1}}绑定到Datepicker
的{{1}}。
如果选择了一个日期并将其存储在textProperty
“db”中,那么它将被解析,没有错误。
但是如果Label db为空,则会出错:
java.time.format.DateTimeParseException:无法解析文本'' 在索引0
如果标签“db”为空或带有值,我希望能够在两种情况下解析日期。
这是我用来解析的更新代码。
tableviewController
Label
的viewController
Label
updatebController.java
tableview.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Employee>(){
FXMLLoader loader=new FXMLLoader(getClass().getResource("view.fxml"));
try{
Parent newParent=loader.load();
viewController sunController=loader.getController();
subController.textToDisplay.set(newValue.getDateOfBirth());
Stage stage =new Stage();
Scene scene =new Scene(newParent);
stage.setScene(scene);
我希望能够解析日期,即使Label db为空,上面的代码仅在Lable db有值时才有效。请帮助。
答案 0 :(得分:0)
对于DatePicker和Label之间的绑定,您可以使用内置的LocalDateStringConverter:
Bindings.bindBidirectional(label.textProperty(), datePicker.valueProperty(), new LocalDateStringConverter());
当DatePicker为空时,标签也将为空,并且不会抛出异常,允许继续使用
注意:在DatePicker失去焦点之前,标签不会更新为空字符串
有了这个,你不需要中间属性“textToDisplay”,而是可以替换这一行:
subController.textToDisplay.set(newValue.getDateOfBirth());
with:
datePicker.setValue(newValue.getDateOfBirth());
假设上面返回一个LocalDate
<小时/> 这是一个简单的例子:
@Override
public void start(Stage primaryStage) throws Exception{
DatePicker datePicker = new DatePicker();
Label label = new Label();
Bindings.bindBidirectional(label.textProperty(), datePicker.valueProperty(), new LocalDateStringConverter());
Button today = new Button("Set today's date");
today.setOnAction(event-> datePicker.setValue(LocalDate.now()));
Button clear = new Button("Clear date");
clear.setOnAction(event-> datePicker.setValue(null));
VBox root = new VBox(5, datePicker,
new HBox(5, new Label("Date of Birth: "), label),
new HBox(5, today, clear));
root.setAlignment(Pos.CENTER);
root.setFillWidth(false);
Scene scene = new Scene(root, 400, 100);
primaryStage.setScene(scene);
primaryStage.show();
}