2016-04-17 11 views
0

私はこの問題が数時間続いています。私はそれが何であるか分かりませんが、現時点ではっきりと考えています。このメソッドは一連の画像を表示します。このメソッドの最初の部分は、グリッドバッグ制約を設定するだけです。一方、ifステートメントの次の部分は、jlabelsを作成し、それらをjlabelsのarraylistに追加しています。例外は、私がarraylistに追加された後にmlelistenersをjlabelsに追加しようとするとスローされています(これは112行目ですが、コード上でコメントしています)。indexOutOfBoundsExceptionを取得している理由が分かりません

public void displayComplexStimulus(BufferedImage[] complexStimulus){ 



    for(int i = 0; i < numberOfElements; i++){ 
     if (i == 0 || i == 1 || i == 2){ 
      c.gridx = i; 
      c.gridy = 0; 
     } 
     else if(i == 3 || i == 4 || i == 5){ 
      c.gridx = i - 3; 
      c.gridy = 1; 
     } 
     else { 
      c.gridx = i - 6; 
      c.gridy = 2; 
     } 

     if(counter == 1){ 



       if (phase1Trial.getPositionOfCorrectImage()!= i){ 
        phase1IncorrectLabels.add(new JLabel(new ImageIcon(complexStimulus[i]))); 
        phase1IncorrectLabels.get(i).addMouseListener(this); //line 112 
        add(phase1IncorrectLabels.get(i),c); 
       } 

       else if(phase1Trial.getPositionOfCorrectImage() == i){ 
        correctLabel = new JLabel(new ImageIcon(complexStimulus[i])); 
        add(correctLabel, c); 
        correctLabel.addMouseListener(this); 

       } 
     } 

    } 





} 
+0

大文字の 'if'を' if(i <= 2)... else if(i <= 5)... else ... 'と置き換えることをお勧めします。 – Nico

+0

numberOfElementの値は6です。 phase1IncorrectLabelsは、ユーザーがクリックしたときに間違っているタスクのラベルです。 6つのラベルが同時に表示され、正しいラベルをクリックする必要があります。だから、6人のうち1人が正しいです。 – lb91

+0

私は部分的に私の問題を解決したと思う。時には、else if条件が満たされているため、要素がincorrectLabels配列に追加されないため、forループのiが増えたときに、配列に十分な要素がありませんでした。 mouselistenerメソッドが不正なラベルに応答していないようで、addMouseListenerメソッドがリスナーをラベルに正しく追加していないと思うように思えるので、まだ問題は残っています。 – lb91

答えて

0

あなたはphase1IncorrectLabelsに要素を追加していないi==phase1Trial.getPositionOfCorrectImage()場合。したがって、配列に1つの要素を追加した後の次の反復では、位置はi-1で、iではありません。 get(i)get(phase1IncorrectLabels.size() - 1)に置き換える必要があります。

+0

そうです。私はなぜmouseListenerメソッドで問題が発生しているのか知っていますか? – lb91

+0

あなたの問題は何ですか? – Nico

+0

mlelistenersを追加すると、jlabelsが応答していないように見えます(上記のコードでmouselistenersが追加されています)。私のmousepressedメソッドでは、このコード行に達しません:\t \t else if((e.getSource()== phase1IncorrectLabels.get(0))||(e.getSource()== phase1IncorrectLabels.get(1) ))||(e.getSource()== phase1IncorrectLabels.get(2))||(e.getSource()== phase1IncorrectLabels.get(3))||(e.getSource()== phase1IncorrectLabels.get() 4))){ – lb91

関連する問題