How to check and uncheck all items when checking o

2019-07-19 13:42发布

问题:

JavaFX CheckComboBox How to check and uncheck all items when checking or unckeck some of the items.

Check all when ckeck item All

Uncheck all when unckeck item All

ObservableList<String> list = FXCollections.observableArrayList("All","Item 1", "Item 2", "Item 3", "Item 4");

checkBoxCombo.getItems().addAll(list);  

checkBoxCombo.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {      

public void onChanged(ListChangeListener.Change<? extends String> c) {

            if(checkBoxCombo.getCheckModel().isChecked(0))                  
                    checkBoxCombo.getCheckModel().checkAll();                
             }
         });

回答1:

Add a boolean field to the listener to prevent recursion:

checkBoxCombo.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {

    private boolean changing = false;

    @Override
    public void onChanged(ListChangeListener.Change<? extends String> c) {
        if (!changing && checkBoxCombo.getCheckModel().isChecked(0)) {
            // trigger no more calls to checkAll when the selected items are modified by checkAll
            changing = true;
            checkBoxCombo.getCheckModel().checkAll();
            changing = false;
        }
    }
});