首页 > 解决方案 > 仅当在 ListView 上选择项目时,如何填充字段并启用按钮

问题描述

所以,我正在创建一个照片库。我有一个照片列表视图,下面有照片的标签,例如名称和日期,以及旁边的按钮,可让您重命名照片。但是,如果没有选择任何内容,我希望禁用所有这些按钮并清除标签。在控制器以及 JavaFX 中如何以及在何处执行此操作(顺便说一下,我正在使用 scenebuilder)?

标签: javajavafxscenebuilder

解决方案


在列表的选择模型上使用绑定:

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时将所有内容初始化为所需状态)。/


推荐阅读