Board logo

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

作者: tonyh    時間: 2020-1-6 20:39     標題: 鍵盤事件 (一)

一、鍵盤事件說明
主控制台模式下應用程式主要是使用鍵盤輸入資料,按鍵後,再進行事件處理。因此事件處理很單純只有一種,不必特別宣告、建立…等。但是在視窗應用程式中,當使用者用鍵盤輸入資料時,其按下或鬆開按鍵皆會觸動鍵盤事件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) 敘述。

素材:baby.png  icon.png

  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 Ch93 implements KeyListener {
  7.        
  8.         private JFrame fm;
  9.         private ImageIcon icon1,icon2;
  10.         private JLabel lb;
  11.         private int x=100,y=100;
  12.         Ch93()
  13.         {
  14.                 icon1=new ImageIcon(Ch93.class.getResource("pic/icon.png"));
  15.                 icon2=new ImageIcon(Ch93.class.getResource("pic/baby.png"));
  16.                  
  17.                 lb=new JLabel(icon2);
  18.                 lb.setBounds(x, y, 128, 128);
  19.                        
  20.                 fm=new JFrame("按方向建移動圖形");
  21.                 fm.setIconImage(icon1.getImage());
  22.                 fm.setBounds(100, 100, 410, 320);
  23.                 fm.setVisible(true);
  24.                 fm.setResizable(false);
  25.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26.                 fm.setLayout(null);
  27.                 fm.addKeyListener(this);
  28.                 fm.add(lb);       
  29.         }

  30.         public void keyPressed(KeyEvent e)
  31.         {
  32.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  33.                         y-=5;
  34.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  35.                         y+=5;
  36.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  37.                         x-=5;
  38.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  39.                         x+=5;
  40.                 lb.setLocation(x, y);
  41.         }
  42.         public void keyReleased(KeyEvent e){}
  43.         public void keyTyped(KeyEvent e){}
  44.        
  45.         public static void main(String[] args) {
  46.                 new Ch93();
  47.         }
  48. }
複製代碼

作者: 洪翊庭    時間: 2020-1-6 21:03

  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 Ch87 implements KeyListener {
  7.         
  8.         private JFrame fm;
  9.         private ImageIcon icon1,icon2;
  10.         private JLabel lb;
  11.         private int x=100,y=100;
  12.         Ch87()
  13.         {
  14.                 icon1=new ImageIcon(Ch87.class.getResource("pic/icon.png"));
  15.                 icon2=new ImageIcon(Ch87.class.getResource("pic/baby.png"));
  16.                  
  17.                 lb=new JLabel(icon2);
  18.                 lb.setBounds(x, y, 128, 128);
  19.                         
  20.                 fm=new JFrame("按方向建移動圖形");
  21.                 fm.setIconImage(icon1.getImage());
  22.                 fm.setBounds(100, 100, 410, 320);
  23.                 fm.setVisible(true);
  24.                 fm.setResizable(false);
  25.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26.                 fm.setLayout(null);
  27.                 fm.addKeyListener(this);
  28.                 fm.add(lb);        
  29.         }

  30.         public void keyPressed(KeyEvent e)
  31.         {
  32.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  33.                         y-=5;
  34.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  35.                         y+=5;
  36.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  37.                         x-=5;
  38.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  39.                         x+=5;
  40.                 lb.setLocation(x, y);
  41.         }
  42.         public void keyReleased(KeyEvent e){}
  43.         public void keyTyped(KeyEvent e){}
  44.         
  45.         public static void main(String[] args) {
  46.                 new Ch87();
  47.         }
  48. }
複製代碼

作者: 洪翊展    時間: 2020-1-6 21:03

  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 Ch01 implements KeyListener {
  7.       
  8.         private JFrame fm;
  9.         private ImageIcon icon1,icon2;
  10.         private JLabel lb;
  11.         private int x=100,y=100;
  12.         Ch01()
  13.         {
  14.                 icon1=new ImageIcon(Ch01.class.getResource("pic/icon.png"));
  15.                 icon2=new ImageIcon(Ch01.class.getResource("pic/baby.png"));
  16.                  
  17.                 lb=new JLabel(icon2);
  18.                 lb.setBounds(x, y, 128, 128);
  19.                        
  20.                 fm=new JFrame("按方向建移動圖形");
  21.                 fm.setIconImage(icon1.getImage());
  22.                 fm.setBounds(100, 100, 410, 320);
  23.                 fm.setVisible(true);
  24.                 fm.setResizable(false);
  25.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26.                 fm.setLayout(null);
  27.                 fm.addKeyListener(this);
  28.                 fm.add(lb);      
  29.         }

  30.         public void keyPressed(KeyEvent e)
  31.         {
  32.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  33.                         y-=100;
  34.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  35.                         y+=100;
  36.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  37.                         x-=100;
  38.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  39.                         x+=100;
  40.                 lb.setLocation(x, y);
  41.         }
  42.         public void keyReleased(KeyEvent e){}
  43.         public void keyTyped(KeyEvent e){}
  44.       
  45.         public static void main(String[] args) {
  46.                 new Ch01();
  47.         }
  48. }
複製代碼

作者: 黃宇綸    時間: 2020-1-11 14:43

本帖最後由 黃宇綸 於 2020-1-11 15:28 編輯
  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 Ch01 implements KeyListener {
  7.         JFrame fm;
  8.         ImageIcon ii,ic;
  9.         JLabel lb;
  10.         int x=100,y=100;
  11.         Ch01()
  12.         {
  13.                 ii=new ImageIcon(Ch01.class.getResource("pic/icon.png"));
  14.                 ic=new ImageIcon(Ch01.class.getResource("pic/baby.png"));
  15.                 lb=new JLabel(ic);
  16.                 lb.setBounds(x, y, 128, 128);
  17.                 fm=new JFrame("按方向建移動圖形");
  18.                 fm.setIconImage(ii.getImage());
  19.                 fm.setBounds(100, 100, 410, 320);
  20.                 fm.setVisible(true);
  21.                 fm.setResizable(false);
  22.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23.                 fm.setLayout(null);
  24.                 fm.addKeyListener(this);
  25.                 fm.add(lb);        
  26.         }
  27.         public void keyPressed(KeyEvent e)
  28.         {
  29.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  30.                         y-=5;
  31.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  32.                         y+=5;
  33.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  34.                         x-=5;
  35.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  36.                         x+=5;
  37.                 lb.setLocation(x, y);
  38.         }
  39.         public void keyReleased(KeyEvent e){}
  40.         public void keyTyped(KeyEvent e){}
  41.         public static void main(String[] args) {
  42.                 new Ch01();
  43.         }
  44. }
複製代碼

作者: 李沛昂    時間: 2020-1-12 15:46

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

作者: 黃宇瑄    時間: 2020-1-12 22:43

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

作者: 黃宇綸    時間: 2020-1-20 20:17

  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.ImageIcon;
  4. import java.awt.event.KeyAdapter;
  5. import java.awt.event.KeyEvent;
  6. public class Ch01 extends KeyAdapter{
  7.         JFrame fm;
  8.         JLabel lb;
  9.         ImageIcon ii,ic;
  10.         int x=200, y=100;
  11.         Ch01()
  12.         {
  13.                 ic=new ImageIcon(Ch01.class.getResource("pic/icon.png"));
  14.                 ii=new ImageIcon(Ch01.class.getResource("pic/baby.png"));
  15.                 lb=new JLabel(ii);
  16.                 lb.setBounds(x, y, 128, 128);
  17.                 fm=new JFrame("鍵盤事件");
  18.                 fm.setIconImage(ic.getImage());
  19.                 fm.setBounds(100, 100, 500, 350);
  20.                 fm.setVisible(true);
  21.                 fm.setResizable(true);
  22.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23.                 fm.setLayout(null);
  24.                 fm.add(lb);
  25.                 fm.addKeyListener(this);
  26.         }
  27.         public void keyPressed(KeyEvent e)
  28.         {
  29.                 if(!e.isShiftDown())
  30.                 {
  31.                         if(e.getKeyCode()==KeyEvent.VK_UP)
  32.                                 y-=5;
  33.                         if(e.getKeyCode()==KeyEvent.VK_DOWN)
  34.                                 y+=5;
  35.                         if(e.getKeyCode()==KeyEvent.VK_LEFT)
  36.                                 x-=5;
  37.                         if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  38.                                 x+=5;
  39.                 }else
  40.                 {
  41.                         if(e.getKeyCode()==KeyEvent.VK_UP)
  42.                                 y+=5;
  43.                         if(e.getKeyCode()==KeyEvent.VK_DOWN)
  44.                                 y-=5;
  45.                         if(e.getKeyCode()==KeyEvent.VK_LEFT)
  46.                                 x+=5;
  47.                         if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  48.                                 x-=5;
  49.                 }
  50.                 lb.setLocation(x, y);
  51.         }

  52.         public static void main(String[] args) {
  53.                 new Ch01();
  54.         }

  55. }
複製代碼

作者: 鄭楀諺    時間: 2020-2-8 13:31

  1. import java.awt.event.KeyEvent;
  2. import java.awt.event.KeyListener;

  3. import javax.swing.ImageIcon;
  4. import javax.swing.JFrame;
  5. import javax.swing.JLabel;

  6. public class ch93 implements KeyListener{
  7.         JFrame fm;
  8.         JLabel lb;
  9.         ImageIcon baby, ic;
  10.         int x=100, y=100;
  11.        
  12.         ch93()
  13.         {
  14.                 baby = new ImageIcon(ch93.class.getResource("pic/baby.png"));
  15.                 ic = new ImageIcon(ch93.class.getResource("pic/icon.png"));
  16.                
  17.                 lb = new JLabel(baby);
  18.                 lb.setBounds(x, y, 128, 128);
  19.                
  20.                 fm=new JFrame("按方向建移動圖形");
  21.                 fm.setIconImage(ic.getImage());
  22.                 fm.setBounds(100, 100, 300, 250);
  23.                 fm.setResizable(false);
  24.                 fm.setVisible(true);
  25.                 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26.                 fm.setLayout(null);
  27.                 fm.add(lb);
  28.                 fm.addKeyListener(this);
  29.         }
  30.        
  31.         public static void main(String[] args) {
  32.                 // TODO 自動產生的方法 Stub
  33.                 new ch93();
  34.         }

  35.         @Override
  36.         public void keyPressed(KeyEvent e) {
  37.                 if(e.getKeyCode()==KeyEvent.VK_UP)
  38.                         y-=5;
  39.                 if(e.getKeyCode()==KeyEvent.VK_DOWN)
  40.                         y+=5;
  41.                 if(e.getKeyCode()==KeyEvent.VK_LEFT)
  42.                         x-=5;
  43.                 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  44.                         x+=5;
  45.                 lb.setLocation(x, y);
  46.         }

  47.         @Override
  48.         public void keyReleased(KeyEvent arg0) {}

  49.         @Override
  50.         public void keyTyped(KeyEvent arg0) {}

  51. }
複製代碼

作者: 趙一鳴    時間: 2020-2-28 12:28

  1. import java.awt.event.KeyEvent;
  2. import java.awt.event.KeyListener;

  3. import javax.swing.ImageIcon;
  4. import javax.swing.JFrame;
  5. import javax.swing.JLabel;

  6. public class Ch93 implements KeyListener
  7. {
  8.     JFrame fm;
  9.     ImageIcon ic,bk;
  10.     JLabel lb_ic;
  11.     int x=100,y=100;
  12.     Ch93()
  13.     {
  14.         ic=new ImageIcon(Ch93.class.getResource("pic/baby.png"));
  15.         bk=new ImageIcon(Ch93.class.getResource("pic/icon.png"));
  16.         
  17.         lb_ic=new JLabel(ic);
  18.         lb_ic.setBounds(x, y,128, 128);
  19.         
  20.         fm=new JFrame("按方向移動圖形");
  21.         fm.setVisible(true);
  22.         fm.setResizable(false);
  23.         fm.setLayout(null);
  24.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25.         fm.setBounds(100, 100, 410, 320);
  26.         fm.setIconImage(bk.getImage());
  27.         fm.addKeyListener(this);
  28.         fm.add(lb_ic);
  29.         
  30.     }
  31.    
  32.    
  33.     public static void main(String[] args)
  34.     {
  35.         new Ch93();

  36.     }
  37.     @Override
  38.     public void keyPressed(KeyEvent e)
  39.     {
  40.         if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  41.             x+=5;
  42.         if(e.getKeyCode()==KeyEvent.VK_LEFT)
  43.             x-=5;
  44.         if(e.getKeyCode()==KeyEvent.VK_UP)
  45.             y-=5;
  46.         if(e.getKeyCode()==KeyEvent.VK_DOWN)
  47.             y+=5;
  48.         lb_ic.setLocation(x,y);
  49.     }
  50.     @Override
  51.     public void keyReleased(KeyEvent e)
  52.     {               
  53.     }
  54.     @Override
  55.     public void keyTyped(KeyEvent e)
  56.     {        
  57.     }
  58. }
複製代碼

作者: 趙一鳴    時間: 2020-2-28 12:29

  1. import java.awt.event.KeyEvent;
  2. import java.awt.event.KeyListener;

  3. import javax.swing.ImageIcon;
  4. import javax.swing.JFrame;
  5. import javax.swing.JLabel;

  6. public class Ch93 implements KeyListener
  7. {
  8.     JFrame fm;
  9.     ImageIcon ic,bk;
  10.     JLabel lb_ic;
  11.     int x=100,y=100;
  12.     Ch93()
  13.     {
  14.         ic=new ImageIcon(Ch93.class.getResource("pic/baby.png"));
  15.         bk=new ImageIcon(Ch93.class.getResource("pic/icon.png"));
  16.         
  17.         lb_ic=new JLabel(ic);
  18.         lb_ic.setBounds(x, y,128, 128);
  19.         
  20.         fm=new JFrame("按方向移動圖形");
  21.         fm.setVisible(true);
  22.         fm.setResizable(false);
  23.         fm.setLayout(null);
  24.         fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25.         fm.setBounds(100, 100, 410, 320);
  26.         fm.setIconImage(bk.getImage());
  27.         fm.addKeyListener(this);
  28.         fm.add(lb_ic);
  29.         
  30.     }
  31.    
  32.    
  33.     public static void main(String[] args)
  34.     {
  35.         new Ch93();

  36.     }
  37.     @Override
  38.     public void keyPressed(KeyEvent e)
  39.     {
  40.         if(e.getKeyCode()==KeyEvent.VK_RIGHT)
  41.             x+=5;
  42.         if(e.getKeyCode()==KeyEvent.VK_LEFT)
  43.             x-=5;
  44.         if(e.getKeyCode()==KeyEvent.VK_UP)
  45.             y-=5;
  46.         if(e.getKeyCode()==KeyEvent.VK_DOWN)
  47.             y+=5;
  48.         lb_ic.setLocation(x,y);
  49.     }
  50.     @Override
  51.     public void keyReleased(KeyEvent e)
  52.     {               
  53.     }
  54.     @Override
  55.     public void keyTyped(KeyEvent e)
  56.     {        
  57.     }
  58. }
複製代碼





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