当选中所有ListView复选框时,如何触发JavaFX事件?
当JFXListView中的所有JFXCheckBox都已选中且全部未选中时,如何触发事件 这是我的代码:当选中所有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
@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);
}
}