国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Swing中使用方向鍵移動圖片

開發 后端
本文主要介紹整個JFrame采用null布局,圖片放在Jlabel中,實現了使用鍵盤上面的方向鍵控制圖片的移動??梢赃x擇方向為上,下,左,右,左上,左下,右上,右下等8個方向,當圖片移動到窗口邊緣時就不再移動。詳細請看下文

整個JFrame采用null布局,圖片放在Jlabel中,實現了使用鍵盤上面的方向鍵控制圖片的移動??梢赃x擇方向為上,下,左,右,左上,左下,右上,右下等8個方向,當圖片移動到窗口邊緣時就不再移動。

KEY枚舉:根據按鍵結果得到的移動方向

HORIZION枚舉:鍵盤上按下的左右方向鍵(左、右)

VERTICAL枚舉:鍵盤上按下的上下方向鍵(上、下)

STEP:圖片響應按鍵時移動的單位

怎么響應兩個鍵?

若一個鍵按下(發出press事件)后沒有彈起(未發出release事件)時,按下了另一個鍵(發出press事件),此時就是兩個鍵同時按下了。

由于按鍵由程序的枚舉量記錄,當按下相反方向鍵時(不是同時按住,也就是說按一個鍵后彈起了再按另一個),需要將前一次按下的方向記錄清除(如:先按了左,然后再按右,此時將左的記錄清除)。

  1. package com.cnblogs.hyjiacan;  
  2.    
  3.  import java.awt.Color;  
  4.  import java.awt.Point;  
  5.  import java.awt.event.KeyAdapter;  
  6.  import java.awt.event.KeyEvent;  
  7.    
  8.  import javax.swing.Icon;  
  9.  import javax.swing.ImageIcon;  
  10.  import javax.swing.JFrame;  
  11.  import javax.swing.JLabel;  
  12.    
  13.  enum KEY {  
  14.      UP, RIGHT, DOWN, LEFT, RIGHT_UP, RIGHT_DOWN, LEFT_UP, LEFT_DOWN  
  15.  }  
  16.    
  17.  enum HORIZION {  
  18.      LEFT, RIGHT  
  19.  }  
  20.    
  21.  enum VERTICAL {  
  22.      UP, DOWN  
  23.  }  
  24.    
  25.  public class MoveImage {  
  26.      JFrame win;  
  27.      Icon img;  
  28.      JLabel lb;  
  29.      static final int STEP = 2;  
  30.      KEY key;  
  31.      HORIZION hor;  
  32.      VERTICAL ver;  
  33.    
  34.      public MoveImage() {  
  35.          hor = null;  
  36.          ver = null;  
  37.    
  38.          win = new JFrame("MoveImage");  
  39.          win.setLayout(null);  
  40.          // 加載圖片  
  41.          img = new ImageIcon(getClass().getResource("img.gif"));  
  42.          lb = new JLabel();  
  43.          lb.setSize(img.getIconWidth(), img.getIconHeight());  
  44.          // 裝載圖片  
  45.          lb.setIcon(img);  
  46.    
  47.          win.setBounds(2000400300);  
  48.          // 響應鍵盤上的鍵按下事件  
  49.          win.addKeyListener(new KeyAdapter() {  
  50.              // 鍵值臨時量  
  51.              int k;  
  52.    
  53.              @Override 
  54.              public void keyPressed(KeyEvent e) {  
  55.                  k = e.getKeyCode();  
  56.    
  57.                  switch (k) {  
  58.                  case KeyEvent.VK_UP:  
  59.                      ver = VERTICAL.UP;  
  60.                      break;  
  61.                  case KeyEvent.VK_DOWN:  
  62.                      ver = VERTICAL.DOWN;  
  63.                      break;  
  64.                  case KeyEvent.VK_RIGHT:  
  65.                      hor = HORIZION.RIGHT;  
  66.                      break;  
  67.                  case KeyEvent.VK_LEFT:  
  68.                      hor = HORIZION.LEFT;  
  69.                      break;  
  70.                  }  
  71.                  if (ver == null) {  
  72.                      if (hor == HORIZION.RIGHT) {  
  73.                          key = KEY.RIGHT;  
  74.                      } else {  
  75.                          key = KEY.LEFT;  
  76.                      }  
  77.    
  78.                  } else if (hor == null) {  
  79.                      if (ver == VERTICAL.UP) {  
  80.                          key = KEY.UP;  
  81.                      } else {  
  82.                          key = KEY.DOWN;  
  83.                      }  
  84.                  } else {  
  85.                      if (hor == HORIZION.RIGHT) {  
  86.                          if (ver == VERTICAL.UP) {  
  87.                              key = KEY.RIGHT_UP;  
  88.                          } else {  
  89.                              key = KEY.RIGHT_DOWN;  
  90.                          }  
  91.                      } else {  
  92.                          if (ver == VERTICAL.UP) {  
  93.                              key = KEY.LEFT_UP;  
  94.                          } else {  
  95.                              key = KEY.LEFT_DOWN;  
  96.                          }  
  97.                      }  
  98.                  }  
  99.    
  100.                  move(key);  
  101.              }  
  102.    
  103.              @Override 
  104.              public void keyReleased(KeyEvent e) {  
  105.                  k = e.getKeyCode();  
  106.                  switch (k) {  
  107.                  case KeyEvent.VK_UP:  
  108.                      ver = null;  
  109.                      break;  
  110.                  case KeyEvent.VK_DOWN:  
  111.                      ver = null;  
  112.                      break;  
  113.                  case KeyEvent.VK_RIGHT:  
  114.                      hor = null;  
  115.                      break;  
  116.                  case KeyEvent.VK_LEFT:  
  117.                      hor = null;  
  118.                      break;  
  119.                  }  
  120.              }  
  121.          });  
  122.    
  123.          win.add(lb);  
  124.          win.getContentPane().setBackground(Color.WHITE);  
  125.          win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  126.          win.setVisible(true);  
  127.          win.validate();  
  128.      }  
  129.    
  130.      /**  
  131.       * 移動圖片, 只處理上下左右4個方向鍵,其它的不處理  
  132.       *   
  133.       * @param keyCode  
  134.       *            按下的鍵盤上的鍵的鍵值  
  135.       */ 
  136.      void move(KEY key) {  
  137.          // 記下當前的位置  
  138.          Point pos = lb.getLocation();  
  139.          switch (key) {  
  140.          case UP:// 上方向  
  141.              pos.y -= STEP;  
  142.              break;  
  143.          case RIGHT:// 右方向  
  144.              pos.x += STEP;  
  145.              break;  
  146.          case DOWN:// 下方向  
  147.              pos.y += STEP;  
  148.              break;  
  149.          case LEFT:// 左方向  
  150.              pos.x -= STEP;  
  151.              break;  
  152.          case RIGHT_UP:// 右上方向  
  153.              pos.x += STEP;  
  154.              pos.y -= STEP;  
  155.              break;  
  156.          case RIGHT_DOWN:// 右下方向  
  157.              pos.x += STEP;  
  158.              pos.y += STEP;  
  159.              break;  
  160.          case LEFT_DOWN:// 左下方向  
  161.              pos.x -= STEP;  
  162.              pos.y += STEP;  
  163.              break;  
  164.          case LEFT_UP:// 左上方向  
  165.              pos.x -= STEP;  
  166.              pos.y -= STEP;  
  167.              break;  
  168.          }  
  169.          // 是否移動到了邊緣  
  170.          if (pos.x >= win.getWidth() - lb.getWidth() || pos.x < 0 
  171.                  || pos.y >= win.getHeight() - lb.getHeight() || pos.y < 0)  
  172.              return;  
  173.          // 設置新位置  
  174.          lb.setLocation(pos);  
  175.          lb.validate();  
  176.      }  
  177.    
  178.      public static void main(String[] args) {  
  179.          MoveImage m = new MoveImage();  
  180.      }  
  181.  } 

遺留問題:

在同時按住上下或者左右方向時,圖片會朝著后面按下的那個方向鍵指定的方向移動(理論上此時應該不動的)

在同時按住兩個方向鍵移動時,圖片會先移動一下,然后會頓一下,再繼續移動。

原文鏈接:http://www.cnblogs.com/hyjiacan/archive/2012/05/02/swing-move-image-via-keyboard.html

【編輯推薦】

  1. Java程序設計:圖形與多媒體處理
  2. Java集合框架總結:TreeSet類的排序問題
  3. Java理論與實踐: Web層的狀態復制
  4. Java圖形界面開發:高級Swing容器(三)
  5. Java圖形界面開發:高級Swing容器(二)
責任編輯:林師授 來源: hyjiacan的博客
相關推薦

2020-05-22 16:27:03

筆記本鍵盤尺寸

2009-12-25 13:58:15

LINUX光標移動

2012-03-16 09:35:52

HTML 5

2021-02-05 09:18:33

VS CodeVim操作

2012-04-01 10:02:00

HTML5

2022-09-26 12:28:16

OpenGLAPI使用移動應用

2009-07-15 11:19:17

invokeLaterSwing

2022-07-31 15:41:03

Linux

2011-06-14 13:07:54

Qt 圖片

2013-01-07 10:37:10

移動游戲本地游戲桌游

2010-09-30 14:11:41

JSIE6.0

2016-05-18 14:20:12

LinuxgThumb圖片

2011-08-16 10:19:24

timeconfig中文man

2021-02-20 18:00:26

rangerLinux

2019-12-13 09:45:38

Windows 10PowerToysWindows

2012-06-14 16:04:56

移動端圖片分享

2013-11-06 08:48:41

異構計算移動計算

2012-11-27 10:52:23

移動支付平臺

2010-07-21 15:16:08

SQL Server

2011-07-26 09:48:47

Shell快捷鍵grepinit
點贊
收藏

51CTO技術棧公眾號

欧美日韩国产成人| 妓院一钑片免看黄大片| 亚洲一区视频| 无码免费一区二区三区免费播放| 奇米综合一区二区三区精品视频| 日本久久久网站| 国产精品视频一二三| eeuss在线观看| 884aa四虎影成人精品一区| 国产在线精彩视频| 久久久久久九九九| 亚洲综合色站| 中文字幕av久久| 日本一区二区高清| 久久久国产一区二区三区四区小说| 欧美精品一区二区三区四区五区 | 在线天堂新版最新版在线8| 国产欧美视频一区二区| 北条麻妃在线观看| av亚洲免费| 欧美国产日韩精品免费观看| 久久在精品线影院精品国产| 国产男女无遮挡| 国产欧美一区视频| 精品视频在线观看| 国产激情视频一区二区三区欧美 | 成人亚洲成人影院| 色94色欧美sute亚洲线路一久| 影音先锋在线播放| 久久亚洲国产成人| 欧美日韩四区| 日本欧美视频在线观看| 亚洲成人免费在线观看| 一个人www视频在线免费观看| 久久久久久久999| 亚洲综合三区| gogo人体高清视频| 日韩电影中文 亚洲精品乱码| 亚洲人成精品久久久 | 97精品视频在线| 99综合在线| 成人观看网站a| 精品久久久久久久久久久院品网 | 特黄特色欧美大片| 色噜噜狠狠一区二区三区| 久久精品日产第一区二区三区高清版 | 亚洲男帅同性gay1069| 久色国产在线| 国产精品亚洲美女av网站| 懂色av一区二区三区蜜臀| 欧美男男激情freegay| 久久av中文字幕| 日本欧美在线看| 色综合888| 91a在线视频| 成人亚洲一区二区一| 米奇777四色精品人人爽| 国产999视频| 国产天堂亚洲国产碰碰| 日韩av大片站长工具| 久久久精彩视频| 亚洲精品综合在线| 亚洲精品一区av| 夜夜爽99久久国产综合精品女不卡| 亚洲成人综合在线| 中文字幕亚洲在线观看| 97超碰国产精品| 精品噜噜噜噜久久久久久久久试看 | 天天操天天干天天综合网| 日韩国产91| 日韩精品另类天天更新| 亚洲成av人综合在线观看| 国内毛片久久| ww国产内射精品后入国产| 日韩一区和二区| 中国成人一区| 国产真实伦在线观看| 久久久精品国产| 国产精品一区一区三区| 1024在线播放| 国产在线视频欧美一区二区三区| 午夜精品久久久久久不卡8050| 久久亚州av| 无码aⅴ精品一区二区三区浪潮 | 成人精品国产免费网站| 国产原创精品视频| 亚洲综合中文字幕在线观看| 久久久电影一区二区三区| 美女写真久久影院| 国产大尺度在线观看| 亚洲精品wwwww| 日本成人在线视频网站| 污污影院在线观看| 欧美日韩在线一二三| 精品视频1区2区| 欧美暴力喷水在线| 欧美孕妇孕交| 成人xxxxx色| 色婷婷av一区二区三区大白胸 | 粉嫩av一区二区| www.国产区| 日韩中文字幕在线播放| 成人免费高清在线| 香蕉久久久久久| 亚洲 欧美 日韩系列| 久久久久亚洲精品成人网小说| 久久久99精品久久| 中文字幕一区二区三区中文字幕| 成人羞羞国产免费网站| 欧美人交a欧美精品| 久久综合给合久久狠狠狠97色69| 国产精品一区二区美女视频免费看| 国产无限制自拍| 久久精品国产成人精品| 国产精品国产三级国产aⅴ原创 | 国产精品欧美日韩一区| 免费黄色网页| 国产精品视频久久久| 欧美午夜视频在线观看| 18成人免费观看视频| 黄a在线观看| 国产日韩欧美大片| 成年无码av片在线| 一区二区三区四区国产精品| 亚洲区综合中文字幕日日| 黄色av网站在线播放| 玖玖精品在线视频| 欧美丰满少妇xxxxx| 最近日韩中文字幕| 国产精品国产三级国产在线观看| 在线看黄色av| 桥本有菜av在线| 欧美极品少妇与黑人| 精品国产91乱高清在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 丰乳肥臀在线| 国产无限制自拍| 国产v综合ⅴ日韩v欧美大片| 欧美日韩激情一区二区三区| 精品中文av资源站在线观看| 国产欧美在线观看免费| 女生裸体视频网站免费观看| 国产二区一区| 日韩精品在线免费| 亚洲国产电影在线观看| 99精品一区| 两个人看的在线视频www| 黄色av免费在线播放| av一本久道久久波多野结衣| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久久久影院色老大 | 欧美精品aa| 黄瓜视频成人app免费| 成人天堂av| 清纯唯美一区二区三区| 久久久精品2019中文字幕神马| 精品久久久视频| 国产成都精品91一区二区三| 99久久99久久精品国产片桃花 | 一本色道88久久加勒比精品| 成人精品一二区| 欧美精品黑人性xxxx| 4438x成人网最大色成网站| 日韩欧美一级片| 欧美精品日韩综合在线| 欧美一区二区三区视频免费播放| 一区二区成人在线视频| 在线成人av网站| 欧美午夜寂寞影院| 在线播放日韩精品| 88xx成人精品| 国产精品三区www17con| 蜜桃视频中文字幕| 欧美午夜网站| 国产精品资源在线| 精品一区二区国语对白| 日本亚洲三级在线| 成人高清视频在线| 日本一区二区在线不卡| 亚洲图片激情小说| 91福利区一区二区三区| 欧美精品xxx| 91在线看www| 精品国产乱码久久久久久浪潮| 亚洲丝袜美腿综合| 国产成人8x视频一区二区| 婷婷亚洲最大| 亚洲综合影院| 男女免费观看在线爽爽爽视频| 情趣视频网站在线免费观看| 成年人看的毛片| 欧美日韩视频在线一区二区观看视频| 午夜精品福利视频| 亚洲日本成人女熟在线观看| 在线播放一区二区三区| 一区二区三区波多野结衣在线观看| 成人在线视频首页| 日本欧美加勒比视频| 亚洲精品资源| 亚洲午夜精品一区二区国产|