我想绑定一个简单的对象属性。但是我得到了这个错误
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);
}
}
答案 0 :(得分:0)
通过在textToDisplay
声明中使用原始类型,您可以摆脱编译时检查,这将阻止您在此处为其分配String
值:
subController.textToDisplay.set(db.getText());
dateOfBirth.valueProperty().bind(textToDisplay);
确保将textToDisplay
的值分配给valueProperty()
的{{1}}的值。但是,DatePicker
期望值为DatePicker
类型,并且在LocalDate
的内部某处,检索属性中的值并将其有效地转换为DatePicker
,从而导致LocalDate
1}}因为实际值是ClassCastException
。
您需要将String
转换为String
才能使其发挥作用,例如
LocalDate
public SimpleObjectProperty<LocalDate> textToDisplay = new SimpleObjectProperty<>();
请注意,根据subController.textToDisplay.set(LocalDate.parse(db.getText()));
标签中存储日期的格式,您需要更改执行转换的代码...
对于与DateTimeFormatter.ISO_LOCAL_DATE
不同的日期格式,请使用适当的DateTimeFormatter
,例如
db
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy");