选择正确的JRadioButtons时,创建布尔值以显示true

时间:2015-02-01 19:44:12

标签: java actionlistener jradiobutton

之前的相关问题:Check which jRadioButtons have been selected if they have been created in a loop

我现在想创建一个布尔值,当从每一行中选择所有正确的JRadioButtons时,这个布尔值将为真。

澄清一下,只有当选择所有单选按钮时才会出现这种情况,每行一个是正确的。

下面的代码只有在选择了正确的JRadioButton时才会打印行和btn的行,但我不知道现在如何将其实现到我正在寻找的内容中。提前致谢

//loop for making flow layout for each line of random letters
//counter for having number of the row next to each row in order of selection
int counter = x;
for(int i = 0; i < x; i++)
{
    //new jpanel created for every row needed for the word
    JPanel jpLine = new JPanel(new FlowLayout());

    //new jlabel made with counter number for each row
    JLabel count = new JLabel(Integer.toString(counter));
    jpLine.add(count);
    counter--;
    //random number from 0-5 generated for each row
    Random number = new Random();
    int low = 0;
    int high = 5;
    int ranNumber = number.nextInt((high - low) + low);

    //buttongroup outside loop so only one button can be pressed for each row
    ButtonGroup bg = new ButtonGroup();

    //get selected button's index in any group with bg.getSelection().getActionCommand()
    final int row = i;
    final ButtonGroup btnG = bg;
    ActionListener listener = new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {

            //correct.setText("correct");

            System.out.println("row " + row);
            System.out.println("btn " + btnG.getSelection().getActionCommand());



        }
    };

    //loop for making the number of letters in each row - always going to be 6 letters to choose from in each row
    for(int j = 0; j < 5; j++)
    {
        //if the random number generated for each row equals the loop
        //then new radiobutton will be created for the ith letter of the reversed
        //answer, starting from charAt 0 and going to the last character
        if(ranNumber == j)
        {
            JRadioButton answerLetter = new JRadioButton("<html><font color = 'white'>" + answerForGrid.charAt(i) + "</font></html>");

            bg.add(answerLetter);
            answerLetter.setBackground(Color.decode("#566771"));
            answerLetter.setOpaque(true);
            jpLine.add(answerLetter);

            //use setActionCommand("" + j) on each button to associate each button with its index
            answerLetter.setActionCommand("" + j);
            answerLetter.addActionListener(listener);
        }

        //ranLetter is generated randomly from the alphabet string, so random letters are
        //created for each jradiobutton
        final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        final int N = alphabet.length();

        Random letter = new Random();
        char ranLetter;

        while(true) 
        {
            ranLetter = alphabet.charAt(letter.nextInt(N));
            break;
        }

        JRadioButton k = new JRadioButton("<html><font color = 'white'>" + ranLetter + "</font></html>");

        bg.add(k);
        k.setBackground(Color.decode("#566771"));
        k.setOpaque(true);
        jpLine.add(k);
    }
    //add each row of letters (jpLine) to this loops jpanel
    jpCenterCenter.add(jpLine);
}

1 个答案:

答案 0 :(得分:1)

使用你的代码,你可以在初始循环之前声明一个布尔数组,如下所示:

int counter = x;
boolean[] responses = new boolean[x]
for(int i = 0; i < x; i++)
{
     //new jpanel created for every row needed for the word
     JPanel jpLine = new JPanel(new FlowLayout());

然后,您想要编辑actionListener,以便在选中时将行的布尔值切换为true。重要的是要注意,如果你这样做,你需要将监听器添加到其他按钮,这样如果用户选择了正确的选择,然后切换到错误的选择,布尔值将返回false。

ActionListener listener = new ActionListener() 
{
    public void actionPerformed(ActionEvent e) 
    {

        //correct.setText("correct");

        String action = e.getActionCommand();

        if (action.equals("Incorrect")) {
            reponses[row] = false;
        }
        else {
            responses[row] = true;
            System.out.println("row " + row);
            System.out.println("btn " + action);
        }


    }
};

不要忘记在此处将其添加到其他按钮:

JRadioButton k = new JRadioButton("<html><font color = 'white'>" + ranLetter + "</font></html>");
k.setActionCommand("Incorrect");
k.addActionListener(listener);

然后你可以添加一个单独的方法来检查所有响应是否都设置为true:

private boolean checkAnswers(boolean[] responses) {
    for (boolean b : responses) {
        if (!b) return false
    }
    return true;
}