绑定 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
的值分配给 DatePicker
的 valueProperty()
的值。然而,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));
我想绑定一个简单的对象属性。但是我得到这个错误
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
的值分配给 DatePicker
的 valueProperty()
的值。然而,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));