Если вы хотите, чтобы программа реагировала сразу после нажатия клавиши, вы используете события клавиатуры и интерфейс KeyListener
. В отличие от интерфейсов ActionListener
или ItemListener
, интерфейс KeyListener
должен реализовывать три метода:
void keyPressed(KeyEvent)
- метод, называемый моментом нажатия клавиши
void keyReleased(KeyEvent)
- метод, называемый моментом отпускания клавиши
void keyTyped(KeyEvent)
- Метод, вызываемый после нажатия и отпускания клавиши
Хотя все эти методы должны присутствовать в вашем коде, вам не нужно иметь какие-либо операторы внутри них.
Вызовите метод getKeyChar()
, чтобы узнать, какая клавиша была нажата. Как следует из метода, это возвращается как char
значение. Однако этот метод работает только для буквенных клавиш, цифровых клавиш и знаков пунктуации.
Для мониторинга любой клавиши на клавиатуре используйте метод getKeyCode()
. Это возвращается как int
значение. Вы можете выполнить это с помощью метода getKeyText()
со значением int
в качестве аргумента. Это вернет фактическое имя ключа (то есть Home, F2 и т. Д.).
Вы хотите, чтобы окно закрывалось только при нажатии определенной клавиши. Ниже приведен пример того, как вы будете это делать:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class example extends JFrame implements KeyListener {
JLabel closeLabel = new JLabel("Press the \"x\" key to close me!");
public example() {
super("Close me!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
closeLabel.addKeyListener(this);
closeLabel.setFocusable(true);
add(closeLabel);
pack();
setVisible(true);
}
public void keyTyped(KeyEvent input) {
char key = input.getKeyChar();
if (key == 'x') System.exit(0);
}
public void keyPressed(KeyEvent txt) {
//do nothing
}
public void keyReleased(KeyEvent txt) {
//do nothing
}
}