按键事件可以利用键盘来控制和执行一些动作,或者从键盘上获取输入,只要按下,释放一个键或者在一个组件上敲击,就会触发按键事件。KeyEvent对象描述事件的特性(按下,放开,或者敲击一个键)和对应的值。java提供KeyListener接口处理按键事件。
当按下一个键时会调用KeyPressed处理器,当松开一个键时会调用KeyReleased处理器,当输入一个统一编码时会调用KeyTyped处理器。如果这个键不是统一码(如功能键,修改键,动作键和控制键)
每个按键事件有一个相关的按键字符和按键代码,分别由KeyEvent中的getKeyChar()和getKeyCode()方法返回
getKeyChar(): char 返回这个事件中和键相关的字符
getKeyCode(): int 返回这个事件中和键相关的整数键
keyPressed(e: KeyEvent) 在源组件上按下一个键后被调用
KeyReleased(e: KeyEvent) 在源组件上释放一个键后被调用
KeyTyped(e: KeyEvent) 在源组件上按下一个键然后释放该键后被调用
按键常量
VK_HOME Home键 VK_CONTROL 控制键
VK_END End键 VK_SHIFT shift键
VK_PGUP page up键 VK_BACK_SPACE 退格键
VK_PGDN page down键 VK_CAPS_LOCK 大小写锁定键
VK_UP 上箭头 VK_NUM_LOCK 小键盘锁定键
VK_DOWN 下箭头 VK_ENTER 回车键
VK_LEFT 左箭头 VK_UNDEFINED 未知键
VK_RIGHT 右箭头 VK_F1--VK_F12 F1 -- F12
VK_ESCAPE Esc键 VK_0 --VK_9 0 --- 9
VK_TAB Tab键 VK_A --VK_Z A----Z
getKeyCode()返回定义在表中的值
getKeyChar()返回输入的字符
import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.*;
public
class
KeyEventDemo
extends
JFrame{
private
KeyboardPanel
keyboardPanel
=
new
KeyboardPanel();
public
KeyEventDemo(){
add(
keyboardPanel
);
keyboardPanel
.setFocusable(
true
);
}
public
static
void
main(String[] args){
KeyEventDemo frame =
new
KeyEventDemo();
frame.setTitle(
"KeyEventDemo"
);
frame.setSize(300,300);
frame.setLocationRelativeTo(
null
);
frame.setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE
);
frame.setVisible(
true
);
}
static
class
KeyboardPanel
extends
JPanel{
private
int
x
= 100;
private
int
y
= 100;
private
char
KeyChar
=
'A'
;
public
KeyboardPanel(){
addKeyListener(
new
KeyAdapter(){
public
void
keyPressed(KeyEvent e){
switch
(e.getKeyCode()){
case
KeyEvent.
VK_DOWN
:
y
+= 10;
break
;
case
KeyEvent.
VK_UP
:
y
-= 10;
break
;
case
keyEvent.VK_LEFT:
x
-= 10;
break
;
case
KeyEvent.
VK_RIGHT
:
x
+= 10;
break
;
default
: keyChar = e.getKeyChar();
}
repaint();
}
});
}
protected
void
paintComponent(Graphics g){
super
.paintComponent(g);
g.setFont(
new
Font(
"TimesRoman"
,Font.
PLAIN
,24));
g.drawString(String. valueOf(
KeyChar
),
x
,
y
);
}
}
}