我想了解ObjectProperty如何工作,但仍然没有运气。 我有以下POJO:
public class Article{
private LocalDateTime dateTime;
private final PropertyChangeSupport propertyChangeSupport;
public Article(String title) {
this.propertyChangeSupport = new PropertyChangeSupport(this);
}
public LocalDateTime getDateTime() {
return dateTime;
}
public void setDateTime(LocalDateTime dateTime) {
LocalDateTime pv = this.dateTime;
this.dateTime = dateTime;
propertyChangeSupport.firePropertyChange("dateTime", pv, this.dateTime);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
}
现在,我为dateTime字段创建了objectProperty:
ObjectProperty<LocalDateTime> dateTimeProperty=new JavaBeanObjectPropertyBuilder().bean(article).name("dateTime").build();
现在我想将这个dateTimeProperty绑定到textField.textProperty()。我不知道如何做到这一点:如何格式化数据以在textField中显示dateTime?在textField中输入新的日期时间时,如何创建LocalDateTime实例?我们确实有双向绑定。请解释一下。
答案 0 :(得分:1)
为什么不将bean创建为JavaFX Bean
public class Article {
private ObjectProperty<LocalDateTime> dateTime = new SimpleObjectProperty<>();
public final ObjectProperty<LocalDateTime> dateTimeProperty() {
return dateTime;
}
public void setDateTime(LocalDateTime ldt) {
dateTime.set(ldt);
}
public LocalDateTime getDateTime() {
return dateTime.get();
}
}
然后在您的控件中使用格式化程序
绑定到文本控件myTextField.textProperty().bindBidirectional(article.dateTimeProperty(), new LocalDateTimeStringConverter());
答案 1 :(得分:1)
最佳选择是在文本字段中使用TextFormatter
:
// choose whatever formats you need here...
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
DateTimeFormatter parser = DateTimeFormatter.ofPattern("d/M/y H:m:s");
TextFormatter<LocalDateTime> textFormatter = new TextFormatter(new LocalDateTimeStringConverter(formatter, parser));
myTextField.setTextFormatter(textFormatter);
然后
textFormatter.valueProperty().bindBidirectional(dateTimeProperty);
如果需要,您还可以在TextFormatter
上指定一个过滤器,将编辑限制为仅在此上下文中有意义的字符(尽管其详细信息可能会有点棘手)。有关详细信息,请参阅TextFormatter.Change
的文档。