键盘监听器和动作,鼠标
监听器一样,都是一个接口,在类中引用,继承它的三个方法
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
分别为输入,按下,松开
键盘监听器也可以直接加在界面上,在界面上用英文输入法时,可以被监听器检测到
但是但是,如果同时存在按钮对象,则会出现bug
如图,在按钮上出现的小矩形就是焦点,如果只有界面的话,焦点给的是界面,但如果出现按钮,文本框等,那么焦点会默认给到这些部件,即使点击界面也不会切换。
那么只能通过代码来实现焦点的切换,直接在窗体添加监听器的地方切换焦点
//键盘监听
frame.addKeyListener(listener);
//默认让窗体获得焦点
frame.requestFocus();
为了能在点击按钮后焦点依然在界面上,在每次点击按钮后,要再一次实现焦点的切换。
Jframe frame;
...
@Override
public void actionPerformed(ActionEvent e) {
if(){
...
}
...
//在每次点击按钮后让界面取回焦点
frame.requestFocus();
}
接下来介绍一下键盘监听器的三个方法
先看keyPressed方法和keyReleased方法,顾名思义,这两个就是检测按下和松开按钮
在方法中可以通过getKeycode方法来监听按下按钮的编号,这个方法中对每一个键都对应了数字,包含空格,上下左右等按钮
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下"+e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("松开");
}
最后来看keyTyped方法,这个方法更适合叫输入,按钮中不一定都是有输入的,比如上下左右键,按这些键的时候就不会触发keyTyped方法,我们通过getKeyChar方法来看看
@Override
public void keyTyped(KeyEvent e) {
System.out.println("输入"+e.getKeyChar());
}