2016-04-17 3 views
0

У меня возникла проблема в течение нескольких часов. Я не знаю, что это такое, но мне сейчас трудно думать. Этот метод отображает набор изображений. Первая часть метода просто устанавливает ограничения сетки, тогда как следующая часть в выражении if создает jlabels и добавляет их в arraylist jlabels. Исключение возникает, когда я пытаюсь добавить mouselisteners в jlabels после того, как они были добавлены в arraylist (это в строке 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 (i <= 2) ... else if (i <= 5) ... else ... ' – Nico

+0

numberOfElements имеет значение 6. phase1IncorrectLabels - это метки в задаче, которые являются неправильными, если человек нажимает на них. Одновременно им показывают 6 ярлыков, и они должны щелкнуть по правильному. Итак, один из 6 правильных. – lb91

+0

Я думаю, что частично исправил свою проблему. Иногда условие else if удовлетворялось, и поэтому элемент не добавлялся бы в массив falseLabels, и поэтому, когда i в цикле for увеличивался, в массиве было недостаточно элементов. У меня все еще есть проблемы, потому что кажется, что метод mouselistener не отвечает на неправильные метки, что заставляет меня думать, что метод addMouseListener не правильно добавляет слушателей к меткам. – lb91

ответ

0

Если i==phase1Trial.getPositionOfCorrectImage() вы не добавляете элемент в phase1IncorrectLabels. Итак, на следующей итерации после добавления одного элемента в массив он находится в позиции i-1, а не i. Вы должны заменить свой get(i) на get(phase1IncorrectLabels.size() - 1).

+0

Правильно, да. Вы знаете, почему у меня может возникнуть проблема с методом mouseListener? – lb91

+0

В чем проблема? – Nico

+0

jlabels, кажется, не реагируют, когда я добавляю к ним mouselisteners (вы можете видеть в приведенном выше коде, где я добавил mouselisteners). В моем методе с мышью код не достигает этой строки кода: \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

Смежные вопросы