![](/img/trans.png)
[英]How to bind StringProperty to ObjectProperty<Integer> in JavaFX?
[英]How to bind ObjectProperty<LocalDate> to StringProperty in JavaFX?
我正在尝试在两个不同的属性之间进行绑定。 如何将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());
}
}
如果Task.date
应该表示一个日期,则使Task.date
成为ObjectProperty<LocalDate>
似乎更有意义。 然后,您可以按照通常的方式双向绑定它们:
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
,因此在这种情况下使用此方法是完全可能的。 请参阅LocalDate序列化错误
如果您确实希望这是一个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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.