2015-07-08 5 views
-2

Как добавить ActionListeners в объекты MemoryFeld во вложенном for-loop?Как добавить ActionListener к анонимному объекту?

for(int i = 0; i < 4; i++){ 
    for(int k = 0; k < 4; k++) 
     grid.add(new MemoryFeld(teile[k][i])); 
    } 
} 
+1

Что такое 'MemoryFeld'? –

+0

класс, который расширяет JButton, извините, я думал, что это было довольно очевидно? – Snick

+4

Что не так с созданием ссылки, добавьте actionlistener в ссылку, затем добавьте ссылку на сетку? Ум, довольно очевидно, кто, _you_? –

ответ

0

Вы должны добавить его так же, как и любой другой ActionListener

for(int i = 0; i < 4; i++){ 
    for(int k = 0; k < 4; k++) { 
     MemoryFeld thing = new MemoryFeld(teile[k][i]); 
     thing.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       // Will print out message and object to prove it's 
       // different from the other ones 
       System.out.println("This thing was pressed " + x); 
      } 
     }); 
     grid.add(thing); 
    } 
} 

В противном случае вы можете создать функцию для MemoryFeld как так

public MemoryFeld addListener(ActionListener newListener) { 
    this.addActionListener(newListener); 
    return this; 
} 

Это позволит вам сделать это

for(int i = 0; i < 4; i++){ 
    for(int k = 0; k < 4; k++) { 
     grid.add(new MemoryFeld(teile[k][i]).addListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       // Will print out message and object to prove it's 
       // different from the other ones 
       System.out.println("This thing was pressed " + x); 
      } 
     })); 
    } 
} 

Howe ver, лично я думаю, что это труднее читать и ничего не помогает.

+0

Большое спасибо. Я сам это понял, но ваш ответ был именно там, где я виноват. Мне просто нужно было сделать ссылочную переменную в for-loop для memoryFeld (как и вы), и она отлично работала. Тем не менее, спасибо за ответ! – Snick