2012-12-07 5 views
1

Je ne sais pas si c'est un problème stupide que j'ai ou quoi, mais pour la vie de moi je ne peux pas trouver la solution. J'écris un programme de quiz avec 20 questions. Le programme pose chaque question et l'utilisateur a 5 choix qui sont 5 boutons JRadio une fois que l'utilisateur a choisi une réponse qu'il peut toucher à côté pour passer à la question suivante ou précédente pour réviser une question. Le problème que j'ai est une fois que l'utilisateur répond à une question et appuyez sur le bouton radio sélectionné reste sélectionné, ce que je veux dire est si une réponse A pour la question 1 et appuyez sur le choix suivant A sera sélectionné pour la question 2 et ainsi de suite. les 5 boutons radio sont dans un groupe de boutons et j'ai utilisé la méthode de sélection claire pour effacer la sélection cela fonctionne bien sauf si l'utilisateur appuie sur le bouton précédent pour revoir une question une fois qu'il appuie sur le bouton suivant pour continuer toutes les sélections dire que l'utilisateur répond à 10 questions et retourne à la question numéro 3 une fois qu'il a frappé à côté de revenir à la question 10 toutes les questions entre les deux seront effacées.JRadio Bouton Sélection numéro

Je vais ajouter les implémentations suivantes et précédentes ci-dessous. Toutes les idées seront très appréciées.

// implémente le bouton suivant

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

    }); 

// implémente le bouton précédent

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"); 
     } 
    }); 
+1

@mKorbel Quelle est la question? OP - Pour une meilleure aide plus tôt, postez un [SSCCE] (http://sscce.org/) et aussi s'il vous plaît répondez à ma question (à mKorbel). –

Répondre

2

Comme vous l'avez décrit, lorsque l'utilisateur a frappé le bouton suivant, les boutons radio sont effacés, si vous n'enregistrez la sélection de l'utilisateur, bien sûr, l'utilisateur ne peut pas vérifier ses réponses précédentes.

Je pense donc que vous devez créer un HashMap, qui utilise la questionIndex comme la clé, et answer la valeur, pour stocker les sélections de l'utilisateur. Chaque fois que l'utilisateur appuie sur le bouton suivant, il suffit de mettre la sélection de l'utilisateur dans hashmap avec l'ID de la question. Lorsque l'utilisateur appuie sur le bouton précédent, il suffit d'obtenir l'index de la question précédente et d'obtenir la réponse du hashmap, et de sélectionner le bouton radio correspondant.

+0

Je suis désolé je n'ai pas mentionné que je ai déjà une méthode qui fait cela et si je supprime la méthode de sélection claire le programme fonctionne bien toutes les réponses sont sauvegardées le problème se pose lorsque l'utilisateur frappe ensuite et reçoit une question qui n'a pas déjà répondu , lorsqu'il reçoit de telles questions, tous les boutons radio doivent être vides, mais pour une raison quelconque, l'un des boutons est sélectionné. – rafaelzm2000

+0

Dans ce cas, je pense que vous devez vérifier si la question actuelle a déjà été répondue auparavant, par exemple, vous pouvez vérifier hashmap en utilisant l'ID de la question pour voir si la hashmap contient un tel ID, si c'est le cas et sélectionnez le bouton radio, sinon, effacez les boutons radio. – bhuang3