2016-12-19 2 views
1

Мне было интересно, есть ли способ назначить событие click с помощью цикла. Быстрый пример того, что я ищу: Где каждая кнопка будет делать действия внутри myMethod(int).Как пройти для индекса цикла внутри ActionListener actionPerformed [Java]

Таким образом, button[2] должен сделать myMethod(2) и так далее.

// imports...  
public class MyClass { 

     private JButton[] buttons = new JButton[10]; 

     public MyClass() { 
      // constructor 

      for (int i = 0; i < this.buttons.length; i++) { 
      this.buttons[i].addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) {     
         MyClass.this.myMethod(i); 
        } 
       }); 
      } 
     } 

     public void myMethod(int id) { 
      // perform actions 
      //... 
     } 



    } 

Приведенный выше код порождает ошибку в том, что переменная должна быть окончательной или эффективной окончательной. Я знаю, почему, но как я могу это сделать?

ответ

1

Просто создайте временную конечную переменную и присвойте ей значение i. Теперь вы можете использовать конечную переменную, чтобы передать ее myMethod, как показано ниже:

// imports...  
public class MyClass { 

    private JButton[] buttons = new JButton[10]; 

    public MyClass() { 
     // constructor 

     for (int i = 0; i < this.buttons.length; i++) { 
      final int myFinalIndex = i; 
      this.buttons[i].addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        MyClass.this.myMethod(myFinalIndex); 
       } 
      }); 
     } 
    } 

    public void myMethod(int id) { 
     // perform actions 
     // ... 
    } 

} 
+0

Отлично, именно то, что я искал. Большое спасибо! :)) – t4dohx

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