当前位置: 首页 > 知识库问答 >
问题:

无法将选定的复选框保存到变量

程钧
2023-03-14

我对javafx有问题。我有大约40个复选框的GridPane。我需要让用户只能选择一个复选框,并将选中的复选框保存到变量中。

这是使用复选框的方法:

    public static class createBet {
        public static CheckBox bet;

        public static CheckBox isBet(CheckBox[] group, int finalI, AnchorPane resultBlock) {
            for (CheckBox j : group) {
                if (j.equals(bet)) {
                    j.setSelected(false);
                }
            }
            ObservableList resultLabels = resultBlock.getChildren();
            Label label_num = (Label)resultLabels.get(0);
            Label label_win = (Label)resultLabels.get(1);

            if (group[finalI].isSelected()) {
                bet = group[finalI];
                resultBlock.setStyle("-fx-border-color: black;");
                label_num.setStyle("-fx-text-fill: black");
                label_win.setStyle("-fx-text-fill: black");
            }
            else {
                bet = null;
                resultBlock.setStyle("-fx-border-color: gray");
                label_num.setStyle("-fx-text-fill: gray");
                label_win.setStyle("-fx-text-fill: gray");
            }

            return bet;
        }
    }

这是一个最终变量类:

    public class bets {
        public CheckBox numberBet = null;
        public CheckBox colorBet = null;
        public CheckBox evenBet = null;
    }

在那里我使用这些类:

       //(block with variables and links to FXML)

        createBet bet = new createBet();
        bets bets = new bets();

        for (int i = 0; i < numbersGroup.length; i++) {
            int finalI = i;
            numbersGroup[i].selectedProperty().addListener(new ChangeListener<Boolean>() {
                @Override
                public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                    bets.numberBet = createBet.isBet(numbersGroup, finalI, resultNum);
                }
            });

        }

    }
}

复选框选择正确,但所选复选框(类下注)的变量始终等于null。

UPD。我注释类createBet,并将其中的代码添加到公共void changed(observeValue

共有1个答案

羊慈
2023-03-14

我对这个问题的解决方案。我不使用方法isBet设置varbable<代码>isBet仅用于更改复选框和激活块的结果。我在内部操作中设置的变量,其中使用了thei。

类的新版本:

public class Bet {
        private CheckBox bet;

        public void forBet(CheckBox[] group, int finalI, AnchorPane resultBlock) {
            for (CheckBox j : group) {
                if (j.equals(bet)) {
                    j.setSelected(false);
                }
            }
            ObservableList resultLabels = resultBlock.getChildren();
            Label label_num = (Label)resultLabels.get(0);
            Label label_win = (Label)resultLabels.get(1);

            if (group[finalI].isSelected()) {
                bet = group[finalI];
                resultBlock.setStyle("-fx-border-color: black;");
                label_num.setStyle("-fx-text-fill: black");
                label_win.setStyle("-fx-text-fill: black");
            }
            else {
                bet = null;
                resultBlock.setStyle("-fx-border-color: gray");
                label_num.setStyle("-fx-text-fill: gray");
                label_win.setStyle("-fx-text-fill: gray");
            }
        }

        public CheckBox startBet(CheckBox[] group) {
            for (CheckBox i : group){
                if (i.isSelected()) {
                    bet = i;
                    break;
                }
            }
            return bet;
        }
    }

变量:

public CheckBox numberBet = null;
public CheckBox colorBet = null;
public CheckBox evenBet = null;

用于方法:

        Bet Bet = new Bet();

        for (int i = 0; i < numbersGroup.length; i++) {
            int finalI = i;
            numbersGroup[i].selectedProperty().addListener(new ChangeListener<Boolean>() {
                @Override
                public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                    Bet.forBet(numbersGroup, finalI,resultNum);
                }
            });
        }

        btn_start.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                numberBet = Bet.startBet(numbersGroup);
                System.out.println(numberBet);
            }
        });

我想,这是解决我的问题。

 类似资料:
  • 我有一个包含10个项目(书名)的Jlist。用户将被允许从10个项目中选择3个。我想将选定的项目保存到3个不同的字符串变量(例如book0、book1、book2等)。 我不知道该怎么做。

  • 问题内容: 我对编程非常陌生,无法添加到。没有错误,但未显示任何内容。 问题答案: 一个渲染器可以得出一个复选框,但不支持单元格编辑器。而是考虑一个单列。默认的渲染器和编辑器为类型的列是一个,对于实施例。

  • 你好,我正在开发angularjs应用程序。我显示了复选框的列表。我有下面的代码。

  • 期望:如果取消选中/禁用复选框,我希望显示样例布尔值false

  • 本文向大家介绍aurelia 绑定到复选框,包括了aurelia 绑定到复选框的使用技巧和注意事项,需要的朋友参考一下 示例 基本复选框 带有对象数组的复选框 带有布尔值的复选框            

  • 我试图找到一种方法来保存复选框的状态到房间数据库,但当我点击复选框并重新打开应用程序时,它的状态并没有改变。我不知道我哪里出错了。我已经搜索了前面的问题,但找不到解决办法。下面是我的代码和感谢。 TodoAdapter 主体活动