我是 JavaFX 的新手,想知道 Bindings API 是否允许更简单的方法来实现以下目标。考虑一个模型,它包含一个可能为空的数据库(因为数据库异步加载)和一个显示status
反映数据库状态的标签的视图。如果它为空,它应该说类似“正在加载...”,如果不是,它应该显示数据库中有多少项目。如果状态可以反映数据库在增长或缩小时的大小,那也很棒。
到目前为止,我知道我可以使用转换器将整数属性(数据库的大小)绑定到标签的文本属性。这很好,但我希望标签显示的不仅仅是数字。一个本地化的字符串,例如“Loaded {0} items”。我们不要忘记数据库可能仍然为空。
这是我现有的解决方案
@Override
public void initialize(URL url, ResourceBundle bundle) {
// Initialize label with default value
status();
model.databaseProperty().addListener((obs, old, neu) -> {
// Update label when database is no longer null
status();
// Update label when size of database changes
neu.sizeProperty().addListener(x -> status());
});
}
public void status() {
if (model.database() == null) {
status.setText(bundle.getString("status.loading"));
} else {
String text = bundle.getString("status.ready");
int size = model.database().size();
text = new MessageFormat(text).format(size);
status.setText(text);
}
}
它可以工作,但是有没有办法用一连串的绑定来做到这一点,或者至少是其中的一部分?我已经看到布尔绑定有多么强大(和冗长),但我不确定字符串绑定是否可以实现如此灵活的功能。