Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当选中所有ListView复选框时,如何触发JavaFX事件?_Java_Listview_Javafx_Checkbox_Jfoenix - Fatal编程技术网

当选中所有ListView复选框时,如何触发JavaFX事件?

当选中所有ListView复选框时,如何触发JavaFX事件?,java,listview,javafx,checkbox,jfoenix,Java,Listview,Javafx,Checkbox,Jfoenix,当JFXListView中的所有JFXCheckBox都已选中且全部未选中时,如何触发事件 这是我的代码: @FXML private JFXListView li_se; private void Services(ActionEvent e) { li_se.getItems().clear(); for (int i = 0; i < R.OffrirService().size(); i++) { JFXCheckBox s

当JFXListView中的所有JFXCheckBox都已选中且全部未选中时,如何触发事件

这是我的代码:

@FXML
private JFXListView li_se;

private void Services(ActionEvent e) {
        li_se.getItems().clear();
        for (int i = 0; i < R.OffrirService().size(); i++) {
            JFXCheckBox s = new JFXCheckBox(R.OffrirService().get(i));
            s.selectedProperty().addListener((obs, wasOn, isNowOn) -> {
                if (wasOn == false) {
                         //if checked do something                       
                } else {
                         //if unchecked do something
                }
                //System.out.println(s.getText() + " changed on state from " + wasOn + " to " + isNowOn);
            });
            li_se.getItems().add(s);
    }
}
@FXML
私人JFXListView li_se;
私人void服务(ActionEvent e){
li_se.getItems().clear();
对于(inti=0;i{
if(wasOn==false){
//如果你被选中了,做点什么
}否则{
//如果不检查,做点什么
}
//System.out.println(s.getText()+“在状态上从“+wasOn+”更改为“+isnown”);
});
li_se.getItems().add;
}
}

您可以探索绑定

下面是选中的2个复选框的示例:

BooleanProperty bp = new SimpleBooleanProperty(false);
CheckBox cb1 = new CheckBox();
CheckBox cb2 = new CheckBox();
bp.bind(Bindings.and(cb1.selectedProperty(), cb2.selectedProperty()));
bp.addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {

    }
});
BooleanProperty bp=新的simpleboleanproperty(false);
复选框cb1=新复选框();
复选框cb2=新复选框();
bind(Bindings.and(cb1.selectedProperty(),cb2.selectedProperty());
bp.addListener(新的ChangeListener(){
@凌驾
公共无效已更改(observeValue
@FXML
私人JFXListView li_se;
int d;
@FXML
私人void服务(ActionEvent e){
试一试{
li_se.getItems().clear();
对于(inti=0;i{
if(wasOn==false){
//如果你被选中了,做点什么
d++;
如果(d==R.OffrirService().size()){
//如果所有人都被选中,那就做点什么
}
}否则{
//如果不检查,做点什么
d--;
如果(d==0){
//如果所有人都不做某事
}
//System.out.println(s.getText()+“在状态上从“+wasOn+”更改为“+isnown”);
});
li_se.getItems().add;
}
}

我如何绑定动态数量的JFX复选框?谢谢你,这就是我的想法。我可以像下面的答案那样进行绑定。
  IntegerProperty checkedNumbers = new SimpleIntegerProperty(0);
    checkedNumbers.addListener(new javafx.beans.value.ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
            if (newValue == 0) {
                //doSomething
            } else if (newValue == (1 + 2 + 3 + 4 + 5)) {
                //doSomethingElse
            }
        }
    });
    int cBoxNumbers = 5;

    //Implement same ChangeListener for every CBoxes based on different UserData.
    //When CB selected, add its value to checkedNumbers
    //When unselected - subtract
    ChangeListener changeListener;

    for (int i = 1; i <= cBoxNumbers; i++) {
        CheckBox cb1 = new CheckBox();
        cb1.setUserData(i);
        cb1.selectedProperty().addListener(changeListener);
    }
@FXML
private JFXListView li_se;

int d;

@FXML
private void Services(ActionEvent e) {
    try {
        li_se.getItems().clear();
        for (int i = 0; i < R.OffrirService().size(); i++) {
            JFXCheckBox s = new JFXCheckBox(R.OffrirService().get(i));
            s.selectedProperty().addListener((obs, wasOn, isNowOn) -> {
                if (wasOn == false) {
                    //if checked do something
                    d++;
                        if (d == R.OffrirService().size()) {
                            //if all checked do something
                        }
                } else {
                    //if unchecked do something
                    d--;
                        if (d == 0) {
                            //if all unchecked do something
                        }
                //System.out.println(s.getText() + " changed on state from " + wasOn + " to " + isNowOn);
            });
            li_se.getItems().add(s);
    }
}