Все ActionListeners реализовать функцию:
public void actionPerformed(ActionEvent e) {
...//code that reacts to the action...
}
Этот код создает новый анонимный класс, который реализует ActionListener и переписывает функцию actionPerformed к тому, что вы хотите. Новый объект с помощью этой функции добавляется внутренний список Foo о ActionListeners:
foo.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
...//code that reacts to the action...
}
});
Сокращение для этого является использование лямбда-выражения, как ActionListener имеет только одну функцию перезаписи, так что компилятор знает, какой из них вам означает (см документацию по лямбды для получения дополнительной информации):
foo.addActionListener(
(e) -> {
...\code that reacts to the action...
}
);
Когда происходит действие, Foo будет работать свой путь через объекты, с которыми ActionListener он перечислил, и вызвать actionPerformed() на каждом из них. Код для каждой функции объекта запускается поочередно.
Кстати, хорошая практика не слишком много работает в actionPerformed(), поскольку она выполняется в потоке Swing и медленная производительность здесь означает невосприимчивый пользовательский интерфейс. Если вам нужно выполнить трудоемкое действие в ответ на действие, подумайте о том, чтобы начать новый поток внутри этой функции или просто установить флаг, который будет обнаружен существующим потоком.
Что вы подразумеваете под 'У меня есть другое представление для этого?'? – user3437460
Вам нужно прочитать на языке Lambda выражение и анонимные классы в Интернете –