Получение ввода от нескольких групп кнопок в Java

У меня есть множество вопросов, множество возможных ответов и множество свойств, которые я хочу узнать, отвечая на вопросы.

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

Я создал метку для каждого вопроса и JRadioButtons для каждого ответа на этот вопрос, используя разделение на соответствующий элемент в массиве possibleAnswers.

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

Этот изображение показывает, как я хочу, чтобы он выглядел.

На каждый вопрос я хочу найти недвижимость. Допустим, {вопрос1, вопрос2, вопрос3} на самом деле эти вопросы {"переговоры?", "Дорогие?", "Измерение?"}. Когда я получаю текст от выбранных кнопок, я буду говорить -> да, дорого -> нет, размер -> большой, поэтому массив свойств станет {"да", "нет", "большой"}.

Я знаю, как получить выбранный ответ, но не могу понять, как найти вопрос, соответствующий этому ответу. Я думал, что могу как-то использовать созданные мной группы кнопок, но не знаю как.

Надеюсь, это имеет смысл и кто-то может помочь. Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
456
1

Ответы 1

Один из способов сделать это - расширить JRadioButton и добавить простое поле идентификатора (тег). Я не могу сейчас протестировать этот код, но думаю он должен работать.

class MyRadioButton extends JRadioButton{

    private int tag;

    public getTag(){ return tag;}

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

А затем в методе actionPerfomed просто отметьте этот тег и выполните на его основе соответствующее действие.

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

В качестве альтернативы, если вы не хотите расширять JRadioButton, что, возможно, может быть излишним для вашего варианта использования, вы можете использовать RadioButton.setActionCommand и ActionEvent.getActionCommand.

btnRadio.setActionCommand("some_unique_string") 

а затем просто проверьте эту командную строку в actionPerformed

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

Другие вопросы по теме