我有一个像这样的控制器:
public class ItemController {
@FXML TextField name;
@FXML TextField description;
private City city = null;
@FXML public void initialize () {
name.textProperty().bind(city.nameProperty());
description.textProperty().bind(city.descriptionProperty());
}
public void searchById(int idCity) {
//get a city by its id, it returns null if not found
city = Backend.getCity(idCity);
}
}
如您所见,city最初被指定为null,而searchById将其分配给一个新值,我想创建一个绑定到city的属性,当它具有有效值时,但它不会设置文本属性要清空(也许是解开字段,但我不确定)并禁用字段,但我不知道该怎么做,提前感谢任何帮助。
答案 0 :(得分:2)
您需要更改绑定,不仅name
更改,而且city
更改。要做到这一点,city
本身必须是可观察的。
// private City city = null;
private ObjectProperty<City> city = new SimpleObjectProperty<>();
现在,您的文本字段必须绑定到“属性的属性”。标准库中存在一些有限的API,但编写得不好并且处理空值极其严重。我建议您使用第三方库来实现此类功能。 ReactFX内置了此功能,您可以
@FXML public void initialize () {
name.textProperty().bind(Val.flatMap(city, City::nameProperty).orElseConst(""));
name.disableProperty().bind(city.isNull());
// ...
}
对于双向绑定,您可以
name.textProperty().bindBidirectional(Val.selectVar(city, City::nameProperty));