Dobro
Dobro

Reputation: 31

Getting input from multiple button groups in Java

I have an array of question, an array of possible answers and an array of properties I want to find out by answering the questions

String[] questions = new String[]{"Question1", "Question2", "Question3"};
String[] possibleAnswers = new String[]{"yes,no", "yes,no", "big,small"};
String[] properties = new String[]{"", "", ""};

I created a label for every question and JRadioButtons for every answer for that question by using split on the corresponding element in the possibleAnswers array.

   for (int i = 0; i < questions.length; i++) {

        //label that holds the current question
        JLabel questionLabel = new JLabel(questions[i]);
        questionPanel.add(questionLabel);

        // string that holds answers for current question i.e. {yes, no}
        String[] currentQuestionAnswers = possibleAnswers[i].split(",");

        ButtonGroup buttonGroup = new ButtonGroup();

        for (int j = 0; j < currentQuestionAnswers.length; j++) {
            JRadioButton btnRadio = new JRadioButton(currentQuestionAnswers[j]);             

            // action listener that will store the selected answer and the question
            btnRadio.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {

                    answer = btnRadio.getText();

                    // some code that moves answer at the right index in the properties array
                }
            });

            buttonGroup.add(btnRadio);

            questionPanel.add(btnRadio);
        }
    }

This image shows what I want it to look like.

For each question I want to find a property. Let's say {Question1, Question2, Question3} are actually these questions {"talks?", "expensive?", "dimension?"}. When I get the text from the selected buttons, I'll have talks -> yes, expensive -> no, dimension -> big, so the properties array will become {"yes", "no", "big"}.

I know how to get the selected answer, but I can't figure out how to find the question that corresponds to that answer. I thounght I can somehow use the button groups I created, but I don't know how.

I hope this makes sense and someone can help. Thank you.

Upvotes: 2

Views: 531

Answers (1)

dsp_user
dsp_user

Reputation: 2121

One way to do it would be to extend JRadioButton and add a simple ID field (a tag). I can't test this code right now but I think it should work.

class MyRadioButton extends JRadioButton{

    private int tag;

    public getTag(){ return tag;}

    public setTag(int val){ tag = val}
}

And then in the actionPerfomed method, just check this tag and take an appropriate action based on it.

        int tag = 0;

        btnRadio.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {

                    answer = btnRadio.getText();

                   switch(btnRadio.getTag()){
                   case 0:
                   //do some action
                   break;
                   case 1:                 
                   ....                    
                   }
                    // some code that moves answer at the right index in the properties array
                }
            });

            btnRadio.setTag(tag++);//this will set a unique tag for each radio button
            buttonGroup.add(btnRadio);

Alternatively, if you don't want to extend JRadioButton,which arguably might be overkill for your use case, you can use RadioButton.setActionCommand and ActionEvent.getActionCommand

btnRadio.setActionCommand("some_unique_string") 

and then just check this command string in actionPerformed

if("some_unique_string".equals(ae.getActionCommand())
//do something

Upvotes: 0

Related Questions