2012-07-10 20 views
1

我知道;這是越來越糟糕,我確實試圖想出一個可能的解決方案。基本上,我的程序打開多個applet時,它應該只打開一個,而不顯示任何我想要的隨機數學問題。這是我已經得到了代碼:用我的JAVA代碼獲取多個JFrames

package RandomMathGame; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class RandomMathGame { 

    public static void main(String[] args) { 
     RandomProblemGenerator randomProblems = new RandomProblemGenerator(10); 
     final int numberProblems = 10; 
     int correctScore = 0; 
     JPanel panel = new JPanel(); 
     JPanel[] questionPanel = new JPanel[numberProblems]; 
     JPanel mainQuestionPanel = new JPanel(); 
     JPanel mainPanel = new JPanel(); 
     int answer; 
     int correctAnswer; 
     JLabel[] mathProblems = new JLabel[numberProblems]; 
     final JTextField[] mathAnswers = new JTextField[numberProblems]; 
     JLabel[] correctYesNo = new JLabel[numberProblems]; 
     final JLabel score = new JLabel(correctScore + "/10"); 
     JButton submit = new JButton("Submit"); 

     mainQuestionPanel.setLayout(new GridLayout(1, 10)); 

     for (int i = 1; i <= numberProblems; i++) 
     { 
      final int X = randomProblems.createNumberX(); 
      final int Y = randomProblems.createNumberY(); 

      mathProblems[i] = new JLabel("" + X + " * " + Y + " = "); 
      mathAnswers[i] = new JTextField(); 

     String answerStr = mathAnswers[i].getText(); 

    if(answerStr.isEmpty()){ 

      correctYesNo[i] = new JLabel("Not a valid answer/answer field empty!"); 
    } else { 

      answer = Integer.parseInt(mathAnswers[i].getText()); 
      correctAnswer = X * Y; 

      if (answer == correctAnswer) 
      { 
       correctYesNo[i] = new JLabel("Correct answer; good job!"); 
       correctScore = correctScore + 1; 
      } 
      else 
      { 
       correctYesNo[i] = new JLabel("Incorrect answer; try again!"); 

      } 
      questionPanel[i].add(mathProblems[i]); 
      questionPanel[i].add(mathAnswers[i]); 
      questionPanel[i].add(correctYesNo[i]); 
      mainQuestionPanel.add(questionPanel[i]); 
      } 

     final int temp = correctScore; 
     submit.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       score.setText("Score: " + temp + "/10"); 
      } 
     }); 



     panel.add(submit); 
     panel.add(score); 
     mainPanel.setLayout(new GridLayout(1, 2)); 
     mainPanel.add(mainQuestionPanel); 
     mainPanel.add(panel); 
     JFrame gameFrame = new JFrame(); 
     gameFrame.setTitle("Random Math Game"); 
     gameFrame.setSize(1000, 1000); 
     gameFrame.setVisible(true); 
     gameFrame.setContentPane(mainPanel); 



     } 
    } 
} 

回答

1

的多幀由該for循環造成的:

for (int i = 1; i <= numberProblems; i++) 
{ 
... 

它創建JFrame後關閉,所以它使多個的。也許應該在這裏關閉:

final int temp = correctScore; 
    submit.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      score.setText("Score: " + temp + "/10"); 
     } 
    }); 
} // <- CLOSE THE FOR LOOP HERE 

panel.add(submit); 

可能仍有ArrayIndexOutOfBoundsException從環拋出,但(我非常簡短的實驗至少)。

這意味着您正在請求訪問不存在的數組索引,例如你的數組長4個元素,並且你想要元素[16]。如果我可能如此大膽以至於排除故障,我認爲它來自i <= numberProblems。它應該可能是i < numberProblems

由於數組索引從0開始,最後一個元素將是theArray.length - 1而不是theArray.length

+0

那麼,這有助於......至少我現在沒有獲得多個窗口。並感謝關於i <= numberProblems的提示。現在,如果我能弄清楚如何讓它顯示數學問題,我會很高興。 – commandrix 2012-07-10 05:13:29

+0

高興地幫助:) – Ben 2012-07-11 00:02:44

2

問題是gameFrame在for循環中創建(並顯示)。嘗試在創建gameFrame對象之前關閉循環。