Но это работает только тогда, когда я больше ничего не делал (нажал кнопку).
Нет, это не работает ( вообще ).Посмотрите на этот код:
public static void main(String[] args) {
JFrame bec = new Graphic();
// ..
bec.addKeyListener(new Graphic());
}
Слушатель ключа добавлен во второй экземпляр Graphic
, который никогда не отображается.
Другая причина, по которой он не будет работать: потому что KeyListener
(даже при добавлении к правильному экземпляру) требует, чтобы компонент, к которому он добавлен, был фокусируемым (по умолчанию JFrame
нет) и имел фокус ввода (, которого у этого кадра никогда не будет, учитывая егоне фокусируется ).
Решение: Для Swing мы обычно используем привязки клавиш , а не нижний уровень KeyListener
.При связывании ключей предлагаются способы указания условий, на которые он будет вызываться, для некоторых из которых не требуется фокусировка компонента.