按鍵事件可以利用鍵盤來控制和執行一些動作,或者從鍵盤上獲取輸入,只要按下,釋放一個鍵或者在一個組件上敲擊,就會觸發按鍵事件。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_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()返回輸入的字符
1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*; 4 5 public class KeyEventDemo extends JFrame{ 6 private KeyboardPanel keyboardPanel = new KeyboardPanel(); 7 8 public KeyEventDemo(){ 9 add( keyboardPanel); 10 11 keyboardPanel.setFocusable(true); 12 13 } 14 15 public static void main(String[] args){ 16 KeyEventDemo frame = new KeyEventDemo(); 17 frame.setTitle( "KeyEventDemo"); 18 frame.setSize(300,300); 19 frame.setLocationRelativeTo( null); 20 frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); 21 frame.setVisible( true); 22 23 } 24 25 static class KeyboardPanel extends JPanel{ 26 private int x = 100; 27 private int y = 100; 28 private char KeyChar = 'A' ; 29 30 public KeyboardPanel(){ 31 addKeyListener( new KeyAdapter(){ 32 public void keyPressed(KeyEvent e){ 33 switch(e.getKeyCode()){ 34 case KeyEvent.VK_DOWN: y += 10;break; 35 case KeyEvent.VK_UP: y -= 10; break; 36 case keyEvent.VK_LEFT: x -= 10; break; 37 case KeyEvent.VK_RIGHT: x += 10; break; 38 default: keyChar = e.getKeyChar(); 39 } 40 41 repaint(); 42 } 43 }); 44 } 45 46 protected void paintComponent(Graphics g){ 47 super.paintComponent(g); 48 49 g.setFont( new Font("TimesRoman" ,Font.PLAIN,24)); 50 g.drawString(String. valueOf(KeyChar), x, y); 51 } 52 } 53 }
