На самом деле, addKeyListener
принимает KeyListener
в качестве параметра. KeyAdapter
с другой стороны, созданной по той причине, что вы создали этот вопрос. Для простоты". Взгляните на KeyAdapter
:
public abstract class KeyAdapter implements KeyListener {
public void keyTyped(KeyEvent e) {}
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
Он реализует KeyListener
и позволяет вам переопределить - нацелить метод, который вам нужен. Добавление KeyListener
с лямбдами невозможно, поскольку лямбды можно использовать только для @FunctionalInterface
с. @FunctionalInterface
- это интерфейс, который имеет только один не default
метод. KeyListener
интерфейс не один, так как имеет 3 метода.
Вы ничего не можете с этим поделать. Один из способов - создать @FunctinalInterface
s, расширив интерфейс KeyListener
и сделав "неактуальные" для вас методы default
:
Пример:
@FunctionalInterface //Not required, just a convention
public interface KeyRealeasedListener extends KeyListener {
@Override
default void keyPressed(KeyEvent e) {
}
@Override
default void keyTyped(KeyEvent e) {
}
}
Уведомление что keyReleased
не реализовано. И добавить его в компонент:
component.addKeyListener((KeyRealeasedListener) e -> System.out.println("key released"));