2016-12-06 3 views
0

Я пытаюсь определить, когда был нажат объект (который был частью массива), а затем я вызываю некоторый код, используя индекс, который я получил.Как придать тип e.getSource() для возврата индекса ArrayList?

Вот мой фрагмент кода

this.addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent e) { 

      if (cursorState==1) { 
       int indx = trees.indexOf(e.getSource()); 
       Tree tempTree = trees.get(indx); 
       tempTree.killTree(); //Code I call for the object that was clicked on 
       System.out.println("indx"); //Troubleshoot 
       repaint(); 
      } 


     } 

Я постоянно получаю ArrayIndexOutOfBoundsException: -1.

Из моего поиска кажется, что он не получает индекс вообще.

+2

В каком классе «деревья»? И какой аргумент общего типа вы его создавали? – Travis

+0

'indexOf', очевидно, возвращает' -1'. Wich означает, что возвращаемое значение из 'e.getSource()' не существует в дереве. – n247s

ответ

0

Убедитесь, что у вас есть метод equals, переопределенный в классе типа объекта tree, чтобы получить индекс любого объекта в массиве с помощью метода indexOf.

Refer ArrayList not using the overridden equals для переопределения равных методов.

+0

Не уверен, что бы я его переопределил. С небольшим количеством исследований я пробовал это, но он не работает public int hashCode() { \t return java.util.Objects.hashCode (id); \t} \t \t общественные булевы Equals (Object о) { \t \t если (о InstanceOf Tree) { \t \t // Сравнение ID \t \t Tree мо = (дерево) о; \t \t return mo.id.equals (id); \t \t} \t \t return false; \t \t} – GGQOP

+0

Можете ли вы прояснить типы деревьев и объекты e.getSource(). – xitter

+0

Деревья (список массивов) имеют тип Tree, поэтому в моем основном коде я набрал его с помощью Tree. Дерево также ничего не расширяет. Мне жаль, что это, похоже, перевернулось мне на голову. В более простых терминах, что бы эквивалент кода выглядел как простой класс, который имеет один метод drawTree (Graphics2D g2). – GGQOP