绑定 SimpleObjectProperty

Binding SimpleObjectProperty

我想绑定一个简单的对象属性。但是我得到这个错误

java.lang.ClassCastException: java.lang.String cannot be cast to java.time.LocalDate.

请这是下​​面的代码。

EmployeeShowController.java

public class EmployeeShowController implements Initializable{
    @FXML private Label db;

    public void update()throws IOException{
    FXMLLoader loader =new FXMLLoader(getClass().getResource("EmployeeUpdate.fxml"));
    Parent newParent =loader.load();
    EmployeeUpdateController subController=loader.getController();
    subController.textToDisplay.set(db.getText());

    Stage stage =new Stage();
    Scene scene = new Scene(newParent);
    stage.setScene(scene);
    stage.show();

    @Override
    public void initialize(){
    }
}

EmployeeUpdateController.java

public class EmployeeUpdateController implements Initializable{
    @FXML private DatePicker dateOfBirth;
     public SimpleObjectProperty textToDisplay= new SimpleObjectProperty<>();
    @Override
    Public void initialize(){
        dateOfBirth.valueProperty().bind(textToDisplay);
    }

}

通过在 textToDisplay 的声明中使用原始类型,您可以摆脱会阻止您在此处为其分配 String 值的编译时检查:

subController.textToDisplay.set(db.getText());


dateOfBirth.valueProperty().bind(textToDisplay);

确保 textToDisplay 的值分配给 DatePickervalueProperty() 的值。然而,DatePicker 期望值是 LocalDate 类型,并且在 DatePicker 内部的某处检索 属性 中的值并有效地转换为 LocalDate导致 ClassCastException 因为实际值是 String.

您需要将 String 转换为 LocalDate 才能完成这项工作,例如

public SimpleObjectProperty<LocalDate> textToDisplay = new SimpleObjectProperty<>();
subController.textToDisplay.set(LocalDate.parse(db.getText()));

请注意,根据存储在 db 标签中的日期格式,您需要更改执行转换的代码...

对于不同于 DateTimeFormatter.ISO_LOCAL_DATE, use a appropriate DateTimeFormatter 的日期格式,例如

private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy");
subController.textToDisplay.set(LocalDate.parse(db.getText(), DATE_FORMATTER));