java - 如何在 JavaFX 中将 ObjectProperty<LocalDate> 绑定(bind)到 StringProperty?

标签 java javafx data-binding datepicker

我正在尝试绑定(bind)两个不同的属性。 我如何绑定(bind)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;
    }
    }

Controller 类

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 更有意义一个ObjectProperty<LocalDate> ,如果它应该代表一个日期。然后你可以按照通常的方式双向绑定(bind)它们:

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

完全按照需要工作。

请注意,因为在评论中您说您正在使用 StringProperty当您使用 XMLEncoder 整理数据时,在这种情况下完全有可能使用这种方法。请参阅LocalDate serialization error

<小时/>

如果你真的希望它成为 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);

关于java - 如何在 JavaFX 中将 ObjectProperty<LocalDate> 绑定(bind)到 StringProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49697358/

相关文章:

java - 具有字段名称和值的 XML 以响应无法从字段中检索的映射 Java 对象

java - 我无法删除耶拿中的数据类型属性值

java - 我可以在 grails 项目中包含 java 代码,还是必须导入?

JavaFX Spinner 抛出 IllegalArgumentException : The start must be <= the end

android - 在 Android Studio 上导入 JavaFX 项目

Android 数据/ View 绑定(bind)与 findViewById 的性能对比

java - JButton 在 JTextField 之前获得焦点

java - 将 native DLLS 添加到 Java 运行时 (JIntellitype) 时出现问题

java - 自定义 JavaFX 对话框

c# - 我想在组合框中显示包含我搜索的文本的项目