Когда вы объявляете new KeyListener() { ... }
, вы создаете так называемый анонимный внутренний класс, который расширяет KeyListener
и создает его неназванный экземпляр (следовательно, анонимный).Ошибка сообщает, что ваш анонимный внутренний класс, отображаемый как <anonymous DisplayerDeluxe$1>
, не является ни абстрактным, ни реализующим метод keyReleased(java.awt.event.KeyEvent)
, как описано в java.awt.event.KeyListener
.
KeyListener являетсяинтерфейс, который заключает контракт с разработчиками, чтобы обеспечить 3 метода.Это означает, что все классы, включая анонимные внутренние классы, которые реализуют этот интерфейс, должны быть либо абстрактными (и, следовательно, не обязаны предоставлять реализацию), либо конкретным / нормальным классом с предоставленными реализациями.Анонимные внутренние классы всегда являются конкретными, никогда не абстрактными, и поэтому должны всегда реализовывать все требуемые методы.
Решением этой проблемы, без использования других классов, является реализация двух других методов.Поскольку у вас нет желаемой функциональности для них, вы, вероятно, можете оставить их пустыми и ничего не делать.Большинство IDE на самом деле должно помочь вам в этом, поскольку, когда вы начинаете создавать анонимный внутренний класс, они будут предлагать сгенерировать для вас нереализованные методы.
В качестве альтернативы, вы можете расширить другой класс, который может иметь некоторые или всеэти методы уже реализованы с помощью заглушек, таких как KeyAdapter
, но в конечном итоге все методы должны быть реализованы тем или иным способом.