У меня есть множество вопросов, множество возможных ответов и множество свойств, которые я хочу узнать, отвечая на вопросы.
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} на самом деле эти вопросы {"переговоры?", "Дорогие?", "Измерение?"}. Когда я получаю текст от выбранных кнопок, я буду говорить -> да, дорого -> нет, размер -> большой, поэтому массив свойств станет {"да", "нет", "большой"}.
Я знаю, как получить выбранный ответ, но не могу понять, как найти вопрос, соответствующий этому ответу. Я думал, что могу как-то использовать созданные мной группы кнопок, но не знаю как.
Надеюсь, это имеет смысл и кто-то может помочь. Спасибо.




Один из способов сделать это - расширить 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