簡體   English   中英

選中所有ListView CheckBoxes后如何觸發JavaFX事件?

[英]How to trigger a JavaFX event when all ListView CheckBoxes are checked?

當選中JFXListView中的所有JFXCheckBoxes且未選中所有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);
    }
}

您可以探索綁定。

有一個示例選中了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) {

    }
});

對於多個CheckBox,有些奇怪的想法出現了。 我希望可以解釋一下。 像unix chmod 000這樣的主要思想-無訪問權限,777-全部訪問權限。 例如,您有五個CBox。 讓我們為每個添加一些價值。 CB1值1
CB2值2
CB3值3
CB4值4
CB5值5

並使用someVariable存儲所有選定CBox的總價值。 未選擇時:someVariable ==0。當所有選擇時:someVariable ==(1 + 2 + 3 + 4 + 5)

  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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM