java - 仅当在 ListView 上选择项目时,如何填充字段并启用按钮
问题描述
所以,我正在创建一个照片库。我有一个照片列表视图,下面有照片的标签,例如名称和日期,以及旁边的按钮,可让您重命名照片。但是,如果没有选择任何内容,我希望禁用所有这些按钮并清除标签。在控制器以及 JavaFX 中如何以及在何处执行此操作(顺便说一下,我正在使用 scenebuilder)?
解决方案
在列表的选择模型上使用绑定:
myButton.disableProperty().bind(
Bindings.isNull(myListView.getSelectionModel().selectedItemProperty())
);
对于您的标签,您可以执行以下操作
myLabel.textProperty().bind(
Bindings.createStringBinding(() -> {
// arbitrary logic here...
var selectedItem = myListView.getSelectionModel().getSelectedItem() ;
if (selectedItem == null) {
return "" ;
} else {
return "some other string" ;
}
}),
myListView.getSelectionModel().selectedItemProperty()
);
所有这些代码都可以进入控制器的initialize()
方法。
如果你有很多这些,使用监听器可能会更干净:
myListView.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> {
// update everything based on the value of newSelection,
// which will be null if nothing is selected
});
请注意,使用此版本,您必须单独确保所有内容都初始化为正确的状态(默认情况下,在列表视图中不会选择任何内容,因此在选择为null时将所有内容初始化为所需状态)。/
推荐阅读
- javascript - 具有多个匹配条件的对象数组与过滤器不匹配
- asp.net-core - Blazor 中相同类型的属性值更新不正确
- python - Django中的全文mysql数据库搜索
- c - 一个线程全部退出
- javascript - 反应JS | 防止状态数组在输入字段更改时更新
- javascript - Gatsby - “值”必须至少包含 [icon, icons] 之一
- python - Python如何导入同名的包和文件?
- android - 将 MaterialToolbar 的标题改为 center
- vba - 我需要在宏中写什么来对 SAP 中的突然提示进行排序?
- javascript - 循环数据最初未在我的 vue.js 搜索功能中显示