在CheckListView JavaFX上实现全选
我有一个CheckListView,它显示一个自定义对象列表。我试图实现一个全选/全选选项,但是列表视图没有改变。仅当单击时,复选框才会更改在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>
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的各个组件中,然后我认为一切都变得简单了