JavaFX文本字段绑定

时间:2015-08-12 23:36:09

标签: binding javafx

我有一个文本字段,其绑定到这样的时间段:

timeStringProperty.bind(clock.getTimeString()); 
timeTextField.textProperty().bind(timeStringProperty);    

在Clock.java中我有:

public StringBinding getTimeString() {
    return Bindings.createStringBinding(() -> DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM).format(time.get()), time);                             
}

时间来自TimeLine。

这很有效,并且在timeTextfield中显示和更新当前时间。

现在我想为我的程序用户添加确定时间格式的功能,例如"为hh:mm"或者" hh:mm:ss"。

如何绑定到formatString,以便在formatString值更改后,时间显示会以新格式更新?

1 个答案:

答案 0 :(得分:1)

ObjectProperty<DateTimeFormatter>

引入Clock
public class Clock {

    private final ObjectProperty<DateTimeFormatter> formatter = 
        new SimpleObjectProperty<>(DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM));

    public ObjectProperty<DateTimeFormatter> formatterProperty() {
        return formatter ;
    }

    public final DateTimeFormatter getFormatter() {
        return formatterProperty().get();
    }

    public final void setFormatter(DateTimeFormatter formatter) {
        formatterProperty().set(formatter);
    }

    // ... other code as before
}

现在更新StringBinding以便它使用formatter并绑定到它:

public StringBinding getTimeString() {
    return Bindings.createStringBinding(() -> getFormatter().format(time.get()), time, formatter);                             
}