gpt4 book ai didi

java - 绑定(bind)到可以为 null 的对象的 javafx 属性

转载 作者:行者123 更新时间:2023-11-30 07:56:43 25 4
gpt4 key购买 nike

我有一个这样的 Controller :

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 属性的绑定(bind),但它没有将文本属性设置为空(也许取消绑定(bind)字段,但我不确定)并禁用字段,但我不知道该怎么做,在此先感谢您的帮助。

最佳答案

您不仅需要在 name 更改时更改绑定(bind),而且还需要在 city 更改时更改绑定(bind)。为此,city 本身必须是可观察的。

// private City city = null;
private ObjectProperty<City> city = new SimpleObjectProperty<>();

现在您的文本字段必须绑定(bind)到“属性的属性”。在标准库中有一些有限的 API,但它写得不好并且处理空值非常糟糕。我建议您使用第三方库来实现此类功能。 ReactFX内置了这个功能,你可以做

@FXML public void initialize () {
name.textProperty().bind(Val.flatMap(city, City::nameProperty).orElseConst(""));
name.disableProperty().bind(city.isNull());

// ...
}

对于双向绑定(bind)你可以做

name.textProperty().bindBidirectional(Val.selectVar(city, City::nameProperty));

关于java - 绑定(bind)到可以为 null 的对象的 javafx 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41883802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com