これが私が抱えているばかげた問題なのか、それとも何なのかはわかりませんが、私の人生では解決策がわかりません。20問のクイズプログラムを書いています。プログラムは各質問を行い、ユーザーは 5 つの JRadio ボタンである 5 つの選択肢を持っています。ユーザーが 1 つの回答を選択すると、次の質問に移動したり、前の質問を確認したりできます。私が抱えている問題は、ユーザーが質問に答えて次を押すと、選択された前のラジオボタンが選択されたままになります。つまり、質問 1 の回答 A と次の選択肢 A が質問 2 で選択されるということです。5つのラジオボタンはボタングループにあり、選択をクリアする方法を使用して選択をクリアしました。ユーザーが前のボタンを押して質問を確認し、次のボタンを押してすべての選択を続行した場合を除いて、問題なく動作します。
次と前の実装を以下に追加します。どんなアイデアでも大歓迎です。
// 次へボタンを実装
nextBT.setPreferredSize(new Dimension(70, 30));
nextBT.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int nextQuestion = -1;
boolean answer = getAnswer(currentQuestion, selectedButton()).equals(getCorrectAnswer(currentQuestion));
questionHistory[currentHistoryIndex][0] = currentQuestion;
questionHistory[currentHistoryIndex][1] = selectedButton();
if (currentHistoryIndex == maxHistoryIndex) {
//generate next question number to use
int currentLevel = currentQuestion / 25;
int nextLevel = currentLevel;
if (answer) {
if (currentLevel < 3) {
nextLevel++;
}
} else {
if (currentLevel > 0) {
nextLevel--;
}
}
while (true) {
int k = 0;
Random randomNum = new Random();
nextQuestion = nextLevel * 25 + (int) (randomNum.nextInt(25));
for (k = 0; k < maxHistoryIndex; k++) {
if (questionHistory[k][0] == nextQuestion) {
break;
}
}
if (k == maxHistoryIndex) {
break;
}
}
currentHistoryIndex++;
maxHistoryIndex++;
if (maxHistoryIndex == 19) {
nextBT.setEnabled(false);
} else {
nextBT.setEnabled(true);
}
} else {
// returning to question already on list
currentHistoryIndex++;
nextQuestion = questionHistory[currentHistoryIndex][0];
int nextAnswer = questionHistory[currentHistoryIndex][1];
setSelectedButton(nextAnswer);
}
if (currentHistoryIndex == 19) {
nextBT.setEnabled(false);
}
currentQuestion = nextQuestion;
questionHistory[currentHistoryIndex][0] = currentQuestion;
questionHistory[currentHistoryIndex][1] = selectedButton();
question.setText(questions[currentQuestion * 7]);
rb1.setText(questions[(currentQuestion * 7) + 1]);
rb2.setText(questions[(currentQuestion * 7) + 2]);
rb3.setText(questions[(currentQuestion * 7) + 3]);
rb4.setText(questions[(currentQuestion * 7) + 4]);
rb5.setText(questions[(currentQuestion * 7) + 5]);
previousBT.setEnabled(true);
//setSelectedButton(questionHistory[currentHistoryIndex][1]);
questionCountLB.setText("Question " + (currentHistoryIndex + 1) + " of 20");
//if(bg.isSelected()){
bg.clearSelection();
}
});
// 前のボタンを実装
previousBT.setPreferredSize(new Dimension(120, 30));
previousBT.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
nextBT.setEnabled(true);
questionHistory[currentHistoryIndex][1] = selectedButton();
currentHistoryIndex--;
if (currentHistoryIndex == 0) {
previousBT.setEnabled(false);
}
if (currentHistoryIndex > 0) {
previousBT.setEnabled(true);
}
int nextQuestion = questionHistory[currentHistoryIndex][0];
currentQuestion = nextQuestion;
question.setText(questions[currentQuestion * 7]);
rb1.setText(questions[(currentQuestion * 7) + 1]);
rb2.setText(questions[(currentQuestion * 7) + 2]);
rb3.setText(questions[(currentQuestion * 7) + 3]);
rb4.setText(questions[(currentQuestion * 7) + 4]);
rb5.setText(questions[(currentQuestion * 7) + 5]);
setSelectedButton(questionHistory[currentHistoryIndex][1]);
questionCountLB.setText("Question " + (currentHistoryIndex + 1) + " of 20");
}
});