javafx - 如何将服务结果绑定到表单字段?

时间:2017-07-05 16:32:27

标签: javafx javafx-8

在下面的示例中,如何将服务结果绑定到文本字段,因此如果我调用service.restart(),它会更新字段吗?

这是正确的方法,或者通常是在服务类上有属性吗?

public class FormData {
    private StringProperty description = new SimpleStringProperty();

    public String getDescription() {
        return description.get();
    }

    public StringProperty descriptionProperty() {
        return description;
    }

    public void setDescription(String description) {
        this.description.set(description);
    }
}


public class FormDataService extends Service<FormData> {

    @Override
    protected Task<FormData> createTask() {
        return new Task<FormData>() {
            protected FormData call() throws Exception {
                //database query here
                FormData data = new FormData();
                data.setDescription("Test Description");

                return data;
            }
        };
    }
}


public class Controller {
    @FXML
    private TextField textField;


    @FXML
    public void initialize() {
        FormDataService service = new FormDataService();

        //HOW DO I BIND THE SERVICE RESULT TO THE TEXTFIELD?
    }
}

1 个答案:

答案 0 :(得分:2)

可能FormData可能有很多字段,每个字段都应该有相应的TextField控件,对吗? 可能是倾听服务属性将适合您的情况:

service.valueProperty().addListener((o, oldValue, newValue) -> {
    if (newValue != null) {
        textField.setText(newValue.getDescription());
        textField2.setText(newValue.getOtherData());
        // etc
    } else {
        // reset your fields
    }
});