首先解释一下键盘出现延迟的原因:

其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢?

你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的?

所以嘛,键盘还是很人性化的。

知道问题所在,那就说解决办法吧,用boolean就可以解决这个问题,

比如刚开始设置一个UP = false;

当UP = true时,让物体运动;

当按下上键时,把UP = true;

当松下上键时,把UP = false;

这样的话延迟岂不是解决了,只要你不松上键,UP 就一直为true,物体就一直运动;

写了个小例子,可以控制物体的八个方向的运动:

import java.awt.Color;

import java.awt.Graphics;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class MyGame extends JPanel{

JFrame frame;

int x = 10;

int y = 10;

int width = 50;

int height = 50;

int step = 5;

boolean U=false,D=false,L=false,R=false;

MyGame(){

frame = new JFrame();

frame.setSize( 800, 600);

frame.setLayout(null);

this.setLayout(null);

this.setBackground(Color.blue);

this.setBounds(0, 0, 800, 600);

this.setFocusable(true);

this.addKeyListener(new Mykey());

frame.add(this);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new MyGame();

}

public void paint(Graphics g){

super.paint(g);

g.setColor(Color.YELLOW);

g.fillOval(x, y, width, height);

repaint();

run();

try {

Thread.sleep(20);

} catch (InterruptedException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

}

public void run(){

if(!U&&!D&&L&&!R){

x-=step;

}else if(!U&&!D&&!L&&R){

x+=step;

}else if(U&&!D&&!L&&!R){

y-=step;

}else if(!U&&D&&!L&&!R){

y+=step;

}else if(U&&!D&&L&&!R){

x-=step;

y-=step;

}else if(!U&&D&&L&&!R){

x-=step;

y+=step;

}else if(U&&!D&&!L&&R){

x+=step;

y-=step;

}else if(!U&&D&&!L&&R){

x+=step;

y+=step;

}

}

class Mykey extends KeyAdapter{

@Override

public void keyTyped(KeyEvent e) {

// TODO 自动生成的方法存根

}

@Override

public void keyPressed(KeyEvent e) {

// TODO 自动生成的方法存根

switch (e.getKeyCode()) {

case KeyEvent.VK_LEFT:

L=true;

break;

case KeyEvent.VK_RIGHT:

R=true;

break;

case KeyEvent.VK_UP:

U=true;

break;

case KeyEvent.VK_DOWN:

D=true;

break;

}

if(x<=0) L = false;

else if(x>=700) R = false;

if(y<=0) U = false;

else if(y>=490) D = false;

}

@Override

public void keyReleased(KeyEvent e) {

// TODO 自动生成的方法存根

switch (e.getKeyCode()) {

case KeyEvent.VK_LEFT:

L=false;

break;

case KeyEvent.VK_RIGHT:

R=false;

break;

case KeyEvent.VK_UP:

U=false;

break;

case KeyEvent.VK_DOWN:

D=false;

break;

}

}

}

}

如果遇到闪烁现象,请看http://blog.csdn.net/sangjinchao/article/details/53052897

共勉~

java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动相关推荐

  1. 解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  2. java打印args的内容_解决java main函数中的args数组传值问题

    这几天面试中有遇到关于main数组中的args数组传值的问题,一般是从命令提示符中传值,也可以直接在java代码中赋值. 而且这个数组的长度是动态的,根据传值的个数确定数组的长度. 1.从命令提示符中 ...

  3. java编码gbk的不可_解决 java “错误:编码GBK 的不可映射字符”

    在cmd控制台编译时报错:编码GBK的不可映射字符 检查: 1. 查本机区域语言设置中文没有问题 2. 此程序可以在eclipse上正常运行 右键properties-resource-text fi ...

  4. java错误无法读取配置文件_解决Java Web项目无法读取配置文件问题

    错误描述 报错信息如下图所示,Web应用后台在读取配置文件的时候,系统找不到指定的路径. 这是Java Web项目的目录结构: 这是报错部分的代码: static { try { Properties ...

  5. java poi 图片 内存溢出_解决java poi海量数据导出内存溢出问题

    找了很多天的解决方法,一直被分页查询绕进去了,其实数据都能查出来的,真正卡的地方是ExcelExportUtil类下调错了方法. 最开始调用的方法是(标记的地方):  workbook = new H ...

  6. java导出excel限制大小_解决java poi导出excel2003不能超过65536行的问题

    /*** 如果达到50000条数据则重新创建工作表的逻辑*/@Overridepublic void exportExcel(ListformList, ServletOutputStream out ...

  7. 点击延迟_解决移动端浏览器点击延迟300ms的问题——FastClick用法

    为什么要使用FastClick 移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击.为了能够立即响应用户的点击事件,才有了FastClick. 项 ...

  8. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  9. navicat连接oracle无监听程序_一个Java程序员的成长历程(022天)

    第43次(Oracle数据库的使用) 学习主题:Oracle数据库的使用 学习目标: 1 掌握数据库相关概念 2 掌握oracle的安装,认识oracle的目录以及系统用户 3 掌握oracle常用命 ...

最新文章

  1. React后台管理系统-商品列表搜索框listSearch组件
  2. xshell 打开文件跳转到最后_xshell的快捷键(非常实用)
  3. Method not found: '!!0[] System.Array.Empty()'.
  4. fiddler抓包工具简介
  5. mysql设置环境变量
  6. Flutter RichText支持自定义文字背景
  7. 服务器通过响应头向浏览器设置cookie,http响应包括设置cookie jession id,但随后发送请求,请求标头中没有cookie信息...
  8. SAP中Search help的使用
  9. VM虚拟机Bridge模式VMnet0网卡无法启动问题的解决
  10. JavaScript—call, apply, bind 函数(20)
  11. JDK默认是little-endian
  12. 【转】plist文件的内容清空
  13. 帅某---FPGA---黑金
  14. C语言 植物大战僵尸修改阳光值 代码实现
  15. 【论文笔记】RSE//结合遥感数据和气象数据改进关中平原小麦产量估算的LSTM神经网络
  16. C++一本通题库1013
  17. 使用 Let's Encrypt 的免费HTTPS服务
  18. 【Flutter实战】移动技术发展史
  19. 【qq机器人】Nonebot2搭建详细教程
  20. 用MUI花两天时间快速开发『One·一个』App,兼容Android、iOS双平台 1

热门文章

  1. 要闻 | 人大金仓重磅亮相2022南京软博会
  2. Spring cacheable
  3. 企业微信SCRM软件打造私域营销闭环?以保险行业为例
  4. 超级硬干货| 电脑蓝屏代码大全及解决办法合集
  5. Java实现开发短信验证码的完整教程
  6. 12312312312313
  7. python社区微信群_Python 打造微信群聊天机器人(带操作界面)-Go语言中文社区...
  8. usb触摸屏驱动移植
  9. iPad 手指触摸与PC鼠标事件
  10. Python编程零基础如何逆袭成为爬虫实战高手