绑定SimpleObjectProperty

时间:2016-05-24 16:30:13

标签: java generics javafx classcastexception

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

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);
    }

}

1 个答案:

答案 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");