Board logo

標題: 鍵盤事件 [打印本頁]

作者: tonyh    時間: 2015-8-15 15:29     標題: 鍵盤事件

本帖最後由 tonyh 於 2015-9-5 15:36 編輯

一、鍵盤事件說明
主控制台模式下應用程式主要是使用鍵盤輸入資料,按鍵後,再進行事件處理。因此事件處理很單純只有一種,不必特別宣告、建立…等。但是在視窗應用程式中,當使用者用鍵盤輸入資料時,其按下或鬆開按鍵皆會觸動鍵盤事件KeyEvent。
Java在鍵盤的傾聽機制,有兩種方式來處理觸發的事件,分別是「實作KeyListener介面」與「繼承KeyAdapter類別」,在本單元我們將練習實作KeyListener介面。

二、KeyListener介面與KeyAdapter類別皆提供了三種鍵盤處理事件方法
1. void keyPressed(KeyEvent e)
 當鍵盤按鍵被按下時所觸發的事件。
2. void keyReleased(KeyEvent e)
 當鍵盤已按下的按鍵被放開時所觸發的事件。
3. void keyTyped(KeyEvent e)
 鍵入字元事件,即按下與放開的整個過程。此時,會產生按鍵的對應字元,但有些按鍵如Ctrl或Shift等沒有字元對應。

三、KeyEvent類別常用的方法
1. int getkeyCode()
 當按下或放開了某一個按鍵,會傳回一個整數型態的鍵盤碼。而鍵盤事件類別KeyEvent為一些常用的按鍵定義了常數代碼,如下:
 ① 0 ~ 9數字:KeyEvent.VK_0 ~ KeyEvent.VK_9。
 ② A ~ Z字母:KeyEvent.VK_A ~ KeyEvent.VK_Z。
 ③ 方向鍵:KeyEvent.VK_UP、KeyEvent.VK_DOWN、KeyEvent.VK_LEFT、KeyEvent.VK_RIGHT。
 ④ 常用鍵:KeyEvent.VK_SHIFT、KeyEvent.VK_CONTROL、KeyEvent.VK_ALT、KeyEvent.VK_ENTER…等。
2. char getkeyChar()
 當按下或放開了某一個按鍵,傳回該按鍵的字元。
3. boolean isShiftDown()
 當Shift鍵被按時,傳回值true。
4. boolean isControlDown()
 當Ctrl鍵被按時,傳回值true。
5. boolean isAltDown()
 當Alt鍵被按時,傳回值true。

四、實作KeyListener介面
鍵盤事件傾聽者介面為「KeyListener」,鍵盤事件「事件來源」就是視窗物件,要將視窗物件與鍵盤事件傾聽者連結在一起(註冊傾聽者),要使用 addKeyListener(this) 敘述。

[attach]1364[/attach]
  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.KeyListener;
  5. import java.awt.event.KeyEvent;

  6. public class Ch84 implements KeyListener{
  7.        
  8.         private JFrame fm;
  9.         private JLabel lb;
  10.         private ImageIcon icon1, icon2;
  11.         private int x=100, y=100;
  12.        
  13.         Ch84()
  14.         {
  15.                 icon1=new ImageIcon(Ch84.class.getResource("pic/icon.png"));
  16.                 icon2=new ImageIcon(Ch84.class.getResource("pic/baby.png"));
  17.                
  18.                 lb=new JLabel(icon2);
  19.                 lb.setBounds(x, y, 128, 128);
  20.                
  21.                 fm=new JFrame("按方向鍵移動圖形");
  22.                 fm.setBounds(100, 100, 410, 320);
  23.                 fm.setIconImage(icon1.getImage());
  24.                 fm.setVisible(true);
  25.                 fm.setResizable(false);
  26.                 fm.setLayout(null);
  27.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.                 fm.add(lb);
  29.                 fm.addKeyListener(this);
  30.         }
  31.        
  32.         public void keyPressed(KeyEvent e)
  33.         {
  34.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  35.                         y-=25;
  36.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  37.                         y+=25;
  38.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  39.                         x-=25;
  40.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  41.                         x+=25;
  42.                 lb.setLocation(x, y);
  43.         }
  44.        
  45.         public void keyReleased(KeyEvent e){}
  46.        
  47.         public void keyTyped(KeyEvent e){}

  48.         public static void main(String[] args) {
  49.                 Ch84 app=new Ch84();
  50.         }

  51. }
複製代碼

作者: 林以諾    時間: 2015-8-29 15:23

  1. import javax.swing.*;
  2. import java.awt.event.*;
  3. package ch84;
  4. public class ch84 implements KeyListener{   
  5.     private JFrame fm;
  6.     private JLabel lb;
  7.     private ImageIcon icon1, icon2;
  8.     private int x=100, y=100;
  9.    
  10.     ch84()
  11.     {
  12.             icon1=new ImageIcon(Ch84.class.getResource("pic/icon.png"));
  13.             icon2=new ImageIcon(Ch84.class.getResource("pic/baby.png"));           
  14.             lb=new JLabel(icon2);
  15.             lb.setBounds(x, y, 128, 128);
  16.             
  17.             fm=new JFrame("按方向鍵移動圖形");
  18.             fm.setBounds(100, 100, 410, 320);
  19.             fm.setIconImage(icon1.getImage());
  20.             fm.setVisible(true);
  21.             fm.setResizable(false);
  22.             fm.setLayout(null);
  23.             fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  24.             fm.add(lb);
  25.             fm.addKeyListener(this);
  26.     }  
  27.     public void keyPressed(KeyEvent e)
  28.     {
  29.             if(e.getKeyCode()==KeyEvent.VK_UP)
  30.                     y-=25;
  31.             if(e.getKeyCode()==KeyEvent.VK_DOWN)
  32.                     y+=25;
  33.             if(e.getKeyCode()==KeyEvent.VK_LEFT)
  34.                     x-=25;
  35.             if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  36.                     x+=25;
  37.             lb.setLocation(x, y);
  38.     }
  39.    
  40.     public void keyReleased(KeyEvent e){}
  41.    
  42.     public void keyTyped(KeyEvent e){}

  43.     public static void main(String[] args) {
  44.             ch84 app=new ch84();
  45.     }
  46. }
複製代碼

作者: 張瀚仁    時間: 2015-8-29 15:25

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.KeyListener;
  5. import java.awt.event.KeyEvent;

  6. public class Ch83 implements KeyListener{
  7.         
  8.         private JFrame fm;
  9.         private JLabel lb;
  10.         private ImageIcon icon1, icon2;
  11.         private int x=100, y=100;
  12.         
  13.         Ch83()
  14.         {
  15.                 icon1=new ImageIcon(Ch83.class.getResource("pic/icon.png"));
  16.                 icon2=new ImageIcon(Ch83.class.getResource("pic/baby.png"));
  17.                
  18.                 lb=new JLabel(icon2);
  19.                 lb.setBounds(x, y, 128, 128);
  20.                
  21.                 fm=new JFrame("按方向鍵移動圖形");
  22.                 fm.setBounds(100, 100, 410, 320);
  23.                 fm.setIconImage(icon1.getImage());
  24.                 fm.setVisible(true);
  25.                 fm.setResizable(false);
  26.                 fm.setLayout(null);
  27.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.                 fm.add(lb);
  29.                 fm.addKeyListener(this);
  30.         }
  31.         
  32.         public void keyPressed(KeyEvent e)
  33.         {
  34.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  35.                         y-=25;
  36.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  37.                         y+=25;
  38.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  39.                         x-=25;
  40.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  41.                         x+=25;
  42.                 lb.setLocation(x, y);
  43.         }
  44.         
  45.         public void keyReleased(KeyEvent e){}
  46.         
  47.         public void keyTyped(KeyEvent e){}

  48.         public static void main(String[] args) {
  49.                 Ch83 app=new Ch83();
  50.         }

  51. }
複製代碼

作者: 劉泳鱔    時間: 2015-8-29 15:30

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.KeyListener;
  5. import java.awt.event.KeyEvent;

  6. public class Ch84 implements KeyListener
  7. {
  8.         
  9.         private JFrame fm;
  10.         private JLabel lb;
  11.         private ImageIcon icon1, icon2;
  12.         private int x=100, y=100;
  13.         
  14.         Ch84()
  15.         {
  16.                 icon1=new ImageIcon(Ch84.class.getResource("pic/icon.png"));
  17.                 icon2=new ImageIcon(Ch84.class.getResource("pic/baby.png"));
  18.                
  19.                 lb=new JLabel(icon2);
  20.                 lb.setBounds(x, y, 128, 128);
  21.                
  22.                 fm=new JFrame("按方向鍵移動圖形");
  23.                 fm.setBounds(100, 100, 410, 320);
  24.                 fm.setIconImage(icon1.getImage());
  25.                 fm.setVisible(true);
  26.                 fm.setResizable(false);
  27.                 fm.setLayout(null);
  28.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29.                 fm.add(lb);
  30.                 fm.addKeyListener(this);
  31.         }
  32.         
  33.         public void keyPressed(KeyEvent e)
  34.         {
  35.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  36.                         y-=25;
  37.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  38.                         y+=25;
  39.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  40.                         x-=25;
  41.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  42.                         x+=25;
  43.                 lb.setLocation(x, y);
  44.         }
  45.         
  46.         public void keyReleased(KeyEvent e){}
  47.         
  48.         public void keyTyped(KeyEvent e){}

  49.         public static void main(String[] args)
  50.         {
  51.                 Ch84 app=new Ch84();
  52.         }

  53. }
複製代碼

作者: 許逸群    時間: 2015-9-5 11:37

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.KeyListener;
  5. import java.awt.event.KeyEvent;

  6. public class Ch84 implements KeyListener
  7. {
  8.         
  9.         private JFrame fm;
  10.         private JLabel lb;
  11.         private ImageIcon icon1, icon2;
  12.         private int x=100, y=100;
  13.         
  14.         Ch84()
  15.         {
  16.                 icon1=new ImageIcon(Ch84.class.getResource("pic/icon.png"));
  17.                 icon2=new ImageIcon(Ch84.class.getResource("pic/baby.png"));
  18.                
  19.                 lb=new JLabel(icon2);
  20.                 lb.setBounds(x, y, 128, 128);
  21.                
  22.                 fm=new JFrame("按方向鍵移動圖形");
  23.                 fm.setBounds(100, 100, 410, 320);
  24.                 fm.setIconImage(icon1.getImage());
  25.                 fm.setVisible(true);
  26.                 fm.setResizable(false);
  27.                 fm.setLayout(null);
  28.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29.                 fm.add(lb);
  30.                 fm.addKeyListener(this);
  31.         }
  32.         
  33.         public void keyPressed(KeyEvent e)
  34.         {
  35.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  36.                         y-=25;
  37.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  38.                         y+=25;
  39.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  40.                         x-=25;
  41.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  42.                         x+=25;
  43.                 lb.setLocation(x, y);
  44.         }
  45.         
  46.         public void keyReleased(KeyEvent e){}
  47.         
  48.         public void keyTyped(KeyEvent e){}

  49.         public static void main(String[] args)
  50.         {
  51.                 Ch84 app=new Ch84();
  52.         }

  53. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2