Я пишу программу, в которой есть элемент викторины, и когда пользователь получает ответ неправильно, дается обратная связь. Вопрос JFrame сделан из JLabel, у которого есть реальный вопрос, и 4 JRadioButtons, которые имеют разные варианты (называемые rad1, rad2, rad3, rad4). То, что я пытаюсь сделать, - это если пользователь ошибается, переключатель с цветом фона правильного ответа становится зеленым, а радиокнопка с ответом на то, что фон пользователя дал красный цвет..setBackground() метод не работает для JRadioButton
Вот цикл, который я использую, чтобы выяснить, какой из ответов является правильным:
private void btnSubmitActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("Submit Clicked");
//figures out what choice the user selected
String correctAnswer = questions.get(current).getAnswer();
int numChoice = -1;
String choice = "";
boolean answered = false;
if (rad1.isSelected()) {
numChoice = 0;
answered = true;
choice = rad1.getText();
} else if (rad2.isSelected()) {
numChoice = 1;
answered = true;
choice = rad2.getText();
} else if (rad3.isSelected()) {
numChoice = 2;
answered = true;
choice = rad3.getText();
} else if (rad4.isSelected()) {
numChoice = 3;
answered = true;
choice = rad4.getText();
} else { //user didn't pick a choice
JOptionPane.showMessageDialog(null, "You didn't answer the question, try again!");
}
if (choice.equals(correctAnswer)) {
score++;
System.out.println("score++");
} else {
//figures out which of the answers was correct
rad1.setBackground(Color.RED);
for (int i = 0; i < 4; i++) {
if (questions.get(current).getChoices()[i].equals(correctAnswer)) {
System.out.println(correctAnswer);
System.out.println(i);
//me trying to see if it will change if I put it outside the switch
//confirmed that it will not.
rad1.setBackground(Color.RED);
switch (i) {
case 0:
rad1.setBackground(new Color(51, 204, 51));
break;
case 1:
rad2.setBackground(new Color(51, 204, 51));
break;
case 2:
rad3.setBackground(new Color(51, 204, 51));
break;
case 3:
rad4.setBackground(new Color(51, 204, 51));
break;
}
break;
}
}
switch (numChoice) {
case 0:
rad1.setBackground(new Color(153, 0, 0));
break;
case 1:
rad2.setBackground(new Color(153, 0, 0));
break;
case 2:
rad3.setBackground(new Color(153, 0, 0));
break;
case 3:
rad4.setBackground(new Color(153, 0, 0));
break;
}
}
//loads next question
//loads the next question
if (current < 10) {
updateFrame();
} else {
//ends the quiz
}
}
Я играл вокруг с помощью метода .setBackground() на некоторое время, и если я выставлять инструкции печати в блоках case, они выполняются, но раскраски не происходит. Есть что-то немое, что мне не хватает?
Благодаря
EDIT: Добавлено больше кода, чтобы увидеть, что цикл находится в методе btnSubmitActionPerformed(). Когда пользователь нажимает кнопку, их ответ должен быть оценен, а цвет переключателя должен быть изменен.
Рассмотрим обеспечение [работоспособный пример] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer