在CheckListView JavaFX上实现全选

在CheckListView JavaFX上实现全选,java,listview,user-interface,javafx,Java,Listview,User Interface,Javafx,我有一个CheckListView,它显示一个自定义对象列表。我试图实现一个全选/全选选项,但是列表视图没有改变。仅当单击时,复选框才会更改 pendingUsers_listView.setCellFactory(new Callback<ListView<User>, javafx.scene.control.ListCell<User>>() { @Override public ListCell<User>

我有一个CheckListView,它显示一个自定义对象列表。我试图实现一个全选/全选选项,但是列表视图没有改变。仅当单击时,复选框才会更改

 pendingUsers_listView.setCellFactory(new Callback<ListView<User>, javafx.scene.control.ListCell<User>>() {
        @Override
        public ListCell<User> call(ListView<User> listView) {
            return new PendingUserCell();
        }
    });
以下是解决方案:

我有一个
模型
类,它保存了有关
列表视图
中项目的信息,我在那里放了一个名称,显示在lisview中,还有一个布尔属性,保存了选中/未选中的值,如下所示:

 public class Model {

    private StringProperty name;
    private BooleanProperty selected;

    public Model(String name, Boolean selected) {
        this.name = new SimpleStringProperty(name);
        this.selected = new SimpleBooleanProperty(selected);
    }

    public String getName() {
        return name.get();
    }

    public StringProperty nameProperty() {
        return name;
    }

    public boolean isSelected() {
        return selected.get();
    }

    public BooleanProperty selectedProperty() {
        return selected;
    }
}
public class ModelConverter extends StringConverter<Model> {
    @Override public String toString(Model object) {
        return object.getName();
    }

    @Override public Model fromString(String string) {
        return null;
    }
}
然后我制作了一个自定义的
StringConverter
,将模型转换为字符串,以便在
listView
中显示文本,如下所示:

 public class Model {

    private StringProperty name;
    private BooleanProperty selected;

    public Model(String name, Boolean selected) {
        this.name = new SimpleStringProperty(name);
        this.selected = new SimpleBooleanProperty(selected);
    }

    public String getName() {
        return name.get();
    }

    public StringProperty nameProperty() {
        return name;
    }

    public boolean isSelected() {
        return selected.get();
    }

    public BooleanProperty selectedProperty() {
        return selected;
    }
}
public class ModelConverter extends StringConverter<Model> {
    @Override public String toString(Model object) {
        return object.getName();
    }

    @Override public Model fromString(String string) {
        return null;
    }
}
因此,我尽可能简单地使用listView中的一个项目,但您可以使用多种方式选择all select none,例如在listView之外定义两个单独的
复选框,或者一个
切换按钮或您想要的其他东西,重要的是将侦听器添加到要将其用于全选全选无的相应组件中,然后我认为一切都变得简单。

以下是解决方案:

我有一个
模型
类,它保存了有关
列表视图
中项目的信息,我在那里放了一个名称,显示在lisview中,还有一个布尔属性,保存了选中/未选中的值,如下所示:

 public class Model {

    private StringProperty name;
    private BooleanProperty selected;

    public Model(String name, Boolean selected) {
        this.name = new SimpleStringProperty(name);
        this.selected = new SimpleBooleanProperty(selected);
    }

    public String getName() {
        return name.get();
    }

    public StringProperty nameProperty() {
        return name;
    }

    public boolean isSelected() {
        return selected.get();
    }

    public BooleanProperty selectedProperty() {
        return selected;
    }
}
public class ModelConverter extends StringConverter<Model> {
    @Override public String toString(Model object) {
        return object.getName();
    }

    @Override public Model fromString(String string) {
        return null;
    }
}
然后我制作了一个自定义的
StringConverter
,将模型转换为字符串,以便在
listView
中显示文本,如下所示:

 public class Model {

    private StringProperty name;
    private BooleanProperty selected;

    public Model(String name, Boolean selected) {
        this.name = new SimpleStringProperty(name);
        this.selected = new SimpleBooleanProperty(selected);
    }

    public String getName() {
        return name.get();
    }

    public StringProperty nameProperty() {
        return name;
    }

    public boolean isSelected() {
        return selected.get();
    }

    public BooleanProperty selectedProperty() {
        return selected;
    }
}
public class ModelConverter extends StringConverter<Model> {
    @Override public String toString(Model object) {
        return object.getName();
    }

    @Override public Model fromString(String string) {
        return null;
    }
}
因此,我尽可能简单地使用listView中的一个项目,但您可以使用多种方式选择all select none,例如在listView之外定义两个单独的
复选框,或者一个
切换按钮或您想要的其他东西,重要的是,将一个监听器添加到您希望用于selectall-selectnone的各个组件中,然后我认为一切都变得简单了