私はこの問題が数時間続いています。私はそれが何であるか分かりませんが、現時点ではっきりと考えています。このメソッドは一連の画像を表示します。このメソッドの最初の部分は、グリッドバッグ制約を設定するだけです。一方、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);
}
}
}
}
大文字の 'if'を' if(i <= 2)... else if(i <= 5)... else ... 'と置き換えることをお勧めします。 – Nico
numberOfElementの値は6です。 phase1IncorrectLabelsは、ユーザーがクリックしたときに間違っているタスクのラベルです。 6つのラベルが同時に表示され、正しいラベルをクリックする必要があります。だから、6人のうち1人が正しいです。 – lb91
私は部分的に私の問題を解決したと思う。時には、else if条件が満たされているため、要素がincorrectLabels配列に追加されないため、forループのiが増えたときに、配列に十分な要素がありませんでした。 mouselistenerメソッドが不正なラベルに応答していないようで、addMouseListenerメソッドがリスナーをラベルに正しく追加していないと思うように思えるので、まだ問題は残っています。 – lb91