Swing中怎么使用方向键移动图片
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,Swing中怎么使用方向键移动图片,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。整个JFrame采用null布局,图片放
千家信息网最后更新 2025年11月07日Swing中怎么使用方向键移动图片
Swing中怎么使用方向键移动图片,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
整个JFrame采用null布局,图片放在Jlabel中,实现了使用键盘上面的方向键控制图片的移动。可以选择方向为上,下,左,右,左上,左下,右上,右下等8个方向,当图片移动到窗口边缘时就不再移动。
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(); } }遗留问题:
在同时按住上下或者左右方向时,图片会朝着后面按下的那个方向键指定的方向移动(理论上此时应该不动的)
在同时按住两个方向键移动时,图片会先移动一下,然后会顿一下,再继续移动。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
方向
移动
图片
键盘
事件
同时
上下
两个
按键
位置
边缘
处理
帮助
清楚
上下左右
也就是
也就是说
内容
单位
对此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
关于网络安全的7人的小品
浙江软件开发外包有哪些
服务器提示内存填充错误
贵州云服务器存储虚拟主机
长沙旭龙网络技术有限公司
sql网上宠物数据库
时间分配 大数据库
高校网络安全会议主持
社区网络安全示范小区
易语言小型数据库
数据库双引号中引用变量
人力资源管理系统数据库实验报告
市南区软件开发公司
网络安全等级保护上市公司
c语言数据库
教职工宣传网络安全好的总结
软件开发 武汉
win7共享服务器
公安局强化网络安全管理
腾讯网络安全团队刘现磊
方舟手游彩色服务器
2010数据库行高列宽
安卓炒股软件开发
女生学哪种网络技术好
服务器ssd硬盘价格
数据库哪家好
软件开发专业i
给一个生成到服务器的文件改名
宝安区网络安全工作领导小组
网络技术部门是做什么的