【发布时间】:2017-05-22 14:53:04
【问题描述】:
我有一个包含 2 个字段(field1、field2)和一个复选框的表单。
如果复选框被选中,我需要第二个字段中的文本是可编辑的,否则,字段 2 中的文本应该与字段 1 中的文本相同。 如何使用绑定在初始化方法中定义它们来管理它?
【问题讨论】:
我有一个包含 2 个字段(field1、field2)和一个复选框的表单。
如果复选框被选中,我需要第二个字段中的文本是可编辑的,否则,字段 2 中的文本应该与字段 1 中的文本相同。 如何使用绑定在初始化方法中定义它们来管理它?
【问题讨论】:
您不能仅使用绑定来执行此操作,因为如果取消选中该复选框,您需要取消绑定第二个文本字段中的文本。 (否则,当用户在文本字段中键入时,您将得到异常。)
你可以这样做:
field2.editableProperty().bind(checkBox.selectedProperty());
checkBox.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
if (isNowSelected) {
field2.textProperty().unbind();
} else {
field2.textProperty().bind(field1.textProperty());
}
});
如果该复选框最初未选中,则需要额外调用
field2.textProperty().bind(field1.textProperty());
以确保文本字段最初也是绑定的。
【讨论】: