如何在<LocalDate>JavaFX中将ObjectProperty绑定到StringProperty?



我正在尝试绑定两个不同的属性。如何将ObjectProperty<LocalDate>绑定到StringProperty

任务类

 public class Task {
    StringProperty time = new SimpleStringProperty();
    ObjectProperty<String> testCase = new SimpleObjectProperty<>();
    StringProperty date = new SimpleStringProperty();
    public Task(String date, String time, String testCase) {
        this.date.set(date);
        this.time.set(time);
        this.testCase.set(testCase);
    }
    public String getdate() {
        return date.get();
    }
    public void setDate(String date) {
        this.date.set(date);
    }
    public StringProperty dateProperty() {
        return date;
    }
    }

控制器类

public class Controller implements Initializable {
@FXML
private DatePicker datePicker;
private Task currentTask = new Task();
@Override
public void initialize(URL location, ResourceBundle resources) {
   datePicker.valueProperty().bindBidirectional(currentTask.dateProperty());
      }
}

如果ObjectProperty<LocalDate> Task.date应该代表一个日期,那么似乎更有意义。然后,您可以按照通常的方式双向绑定它们:

public class Task {
    private ObjectProperty<LocalDate> date = new SimpleObjectProperty<>();
    // ...
    public ObjectProperty<LocalDate> dateProperty() {
        return date ;
    }
    public final LocalDate getDate() {
        return dateProperty().get();
    }
    public final void setDate(LocalDate date) {
        dateProperty().set(date);
    }
}

然后当然

datePicker.valueProperty().bindBidirectional(currentTask.dateProperty());

完全根据需要工作。

请注意,由于您在注释中说您在使用XMLEncoder封送数据时使用StringProperty,因此完全可以在该上下文中使用此方法。请参阅本地日期序列化错误


如果你真的希望这是一个StringProperty(我应该强调,这样做真的没有意义(,你可以使用一个StringConverter

DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE ;
StringConverter<LocalDate> converter = new StringConverter<LocalDate>() {
    @Override
    public LocalDate fromString(String string) {
        return string == null || string.isEmpty() ? null : LocalDate.parse(string, formattter);
    }
    @Override
    public String toString(LocalDate date) {
        return date == null ? null : formatter.format(date);
    }
};

最后:

currentTask.dateProperty().bindBidirectional(datePicker.valueProperty(), converter);

最新更新