Как добавить 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]));
}
}
Как добавить 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]));
}
}
Вы должны добавить его так же, как и любой другой 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, лично я думаю, что это труднее читать и ничего не помогает.
Большое спасибо. Я сам это понял, но ваш ответ был именно там, где я виноват. Мне просто нужно было сделать ссылочную переменную в for-loop для memoryFeld (как и вы), и она отлично работала. Тем не менее, спасибо за ответ! – Snick
Что такое 'MemoryFeld'? –
класс, который расширяет JButton, извините, я думал, что это было довольно очевидно? – Snick
Что не так с созданием ссылки, добавьте actionlistener в ссылку, затем добавьте ссылку на сетку? Ум, довольно очевидно, кто, _you_? –