中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swing中怎么使用方向鍵移動圖片

發布時間:2021-10-29 15:56:43 來源:億速云 閱讀:158 作者:柒染 欄目:編程語言

Swing中怎么使用方向鍵移動圖片,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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

Swing中怎么使用方向鍵移動圖片

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

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

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

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

怎么響應兩個鍵?

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

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

package com.cnblogs.hyjiacan;      import java.awt.Color;   import java.awt.Point;   import java.awt.event.KeyAdapter;   import java.awt.event.KeyEvent;      import javax.swing.Icon;   import javax.swing.ImageIcon;   import javax.swing.JFrame;   import javax.swing.JLabel;      enum KEY {       UP, RIGHT, DOWN, LEFT, RIGHT_UP, RIGHT_DOWN, LEFT_UP, LEFT_DOWN   }      enum HORIZION {       LEFT, RIGHT   }      enum VERTICAL {       UP, DOWN   }      public class MoveImage {       JFrame win;       Icon img;       JLabel lb;       static final int STEP = 2;       KEY key;       HORIZION hor;       VERTICAL ver;          public MoveImage() {           hor = null;           ver = null;              win = new JFrame("MoveImage");           win.setLayout(null);           // 加載圖片           img = new ImageIcon(getClass().getResource("img.gif"));           lb = new JLabel();           lb.setSize(img.getIconWidth(), img.getIconHeight());           // 裝載圖片           lb.setIcon(img);              win.setBounds(200, 0, 400, 300);           // 響應鍵盤上的鍵按下事件           win.addKeyListener(new KeyAdapter() {               // 鍵值臨時量               int k;                  @Override              public void keyPressed(KeyEvent e) {                   k = e.getKeyCode();                      switch (k) {                   case KeyEvent.VK_UP:                       ver = VERTICAL.UP;                       break;                   case KeyEvent.VK_DOWN:                       ver = VERTICAL.DOWN;                       break;                   case KeyEvent.VK_RIGHT:                       hor = HORIZION.RIGHT;                       break;                   case KeyEvent.VK_LEFT:                       hor = HORIZION.LEFT;                       break;                   }                   if (ver == null) {                       if (hor == HORIZION.RIGHT) {                           key = KEY.RIGHT;                       } else {                           key = KEY.LEFT;                       }                      } else if (hor == null) {                       if (ver == VERTICAL.UP) {                           key = KEY.UP;                       } else {                           key = KEY.DOWN;                       }                   } else {                       if (hor == HORIZION.RIGHT) {                           if (ver == VERTICAL.UP) {                               key = KEY.RIGHT_UP;                           } else {                               key = KEY.RIGHT_DOWN;                           }                       } else {                           if (ver == VERTICAL.UP) {                               key = KEY.LEFT_UP;                           } else {                               key = KEY.LEFT_DOWN;                           }                       }                   }                      move(key);               }                  @Override              public void keyReleased(KeyEvent e) {                   k = e.getKeyCode();                   switch (k) {                   case KeyEvent.VK_UP:                       ver = null;                       break;                   case KeyEvent.VK_DOWN:                       ver = null;                       break;                   case KeyEvent.VK_RIGHT:                       hor = null;                       break;                   case KeyEvent.VK_LEFT:                       hor = null;                       break;                   }               }           });              win.add(lb);           win.getContentPane().setBackground(Color.WHITE);           win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);           win.setVisible(true);           win.validate();       }          /**        * 移動圖片, 只處理上下左右4個方向鍵,其它的不處理        *         * @param keyCode        *            按下的鍵盤上的鍵的鍵值        */      void move(KEY key) {           // 記下當前的位置           Point pos = lb.getLocation();           switch (key) {           case UP:// 上方向               pos.y -= STEP;               break;           case RIGHT:// 右方向               pos.x += STEP;               break;           case DOWN:// 下方向               pos.y += STEP;               break;           case LEFT:// 左方向               pos.x -= STEP;               break;           case RIGHT_UP:// 右上方向               pos.x += STEP;               pos.y -= STEP;               break;           case RIGHT_DOWN:// 右下方向               pos.x += STEP;               pos.y += STEP;               break;           case LEFT_DOWN:// 左下方向               pos.x -= STEP;               pos.y += STEP;               break;           case LEFT_UP:// 左上方向               pos.x -= STEP;               pos.y -= STEP;               break;           }           // 是否移動到了邊緣           if (pos.x >= win.getWidth() - lb.getWidth() || pos.x < 0                  || pos.y >= win.getHeight() - lb.getHeight() || pos.y < 0)               return;           // 設置新位置           lb.setLocation(pos);           lb.validate();       }          public static void main(String[] args) {           MoveImage m = new MoveImage();       }   }

遺留問題:

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

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

满洲里市| 镇江市| 高碑店市| 平原县| 威海市| 天镇县| 河东区| 疏附县| 谢通门县| 凤山县| 建阳市| 红桥区| 南川市| 凤城市| 宝兴县| 濉溪县| 浪卡子县| 宁阳县| 蒲江县| 大田县| 定西市| 长沙县| 邵阳市| 黑水县| 高州市| 华蓥市| 贺兰县| 北川| 大厂| 兴安县| 团风县| 泰宁县| 建平县| 图片| 丰宁| 大英县| 阜宁县| 佛坪县| 宜城市| 凌海市| 汤阴县|