因为在自己的游戏需求中谢了要用键盘控制飞机的移动,所以用到键盘监听事件,但是使用了JPanel之后添加了键盘监听事件,按相应的方向键飞机并没有反应。但是如果是为JFrame的内容面板加则会有反应。

为了使得能在JPanel里头使用键盘事件解决方法如下:

1、在JPanel里头添加键盘监听

this.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_UP:
player.move("UP");
break;
case KeyEvent.VK_DOWN:
player.move("DOWN");
break;
case KeyEvent.VK_RIGHT:
player.move("RIGHT");
break;
case KeyEvent.VK_LEFT:
player.move("LEFT");
break;
case KeyEvent.VK_Z: //Z建使用导弹,炸毁所有敌机
player.useMissile(enemyPlanes, bombs);
break;
}
}
});

2、在主函数里头将所要添加的JPnael设置为静态成员

private static BackgroundPanel panelBackground; 

3、在JFrame构造函数中初始化静态成员并添加到内容面板,并且在主函数中使JPanel获得焦点

Frame的构造函数中:

panelBackground = new BackgroundPanel();
panelBackground.setBounds(0,0,386,385);
contentPane.add(panelBackground);

主函数中:

GameFrame frame = new GameFrame();
frame.setVisible(true);
GameFrame.panelBackground.requestFocus();

JPanel添加键盘监听事件的更多相关文章

  1. js 获取当前焦点所在的元素、给元素和input控件添加键盘监听事件、添加页面级的键盘监听事件

    页面级的键盘监听事件 document.onkeydown = function (event) { var e = event || window.event || arguments.callee ...

  2. [置顶] java Gui 键盘监听事件

    简单写一个java Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键.比如:按下A控制台就输出A 效果如图: 以下把实现的效果分为几个步骤: 1.新建一个窗体类继承窗体: 2.给这个窗体 ...

  3. MapControl图层删除或添加触发监听事件

    监听MapControl中对于图层添加和删除的事件 IActiveViewEvents_Event m_MapActiveViewEvents = m_mapControl.Map as IActiv ...

  4. iOS键盘监听事件

    1.注册键盘通知事件 NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; // 键盘将出现事件监听 [center ...

  5. 键盘监听事件KeyListener

    说明:按下实体按键,相应虚拟按键变绿色,释放按键,变白色.   public class Demo extends JFrame { private List<JButton> list; ...

  6. Cocos Creator 键盘监听事件

    键盘事件键盘.设备重力传感器此类全局事件是通过函数 cc.systemEvent.on(type, callback, target) 注册的.cc.SystemEvent.EventType.KEY ...

  7. Android 软键盘监听事件

    Android软键盘的隐藏显示研究 Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入.     那么,弹出软键盘后必然会造成原有布局高度的减少 ...

  8. vue 键盘监听事件

    <template> <div class="hello"> <input v-on:keyup.enter="submit" t ...

  9. ontouch-控件添加ontouch监听事件

    1,代码public class CalculatorViewPager extends ViewPager {}中 package com.android.calculator2; import a ...

随机推荐

  1. xdoj--1144 (合并模板)--有趣的优先队列(优先队列默认权值最大的数在前面)

    我觉得这道题出的很好 区别于“哈夫曼树” 因为事之多合并k个 理论说尽可能多合并. 然后我们看一个简单的例子 4 3 1 2 3 4  ——>6 4——>10 (6+10)=16: 1 2 ...

  2. es6 set&sort

    es6提供了新的数据结构Set. 它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. 1.set去重 首先我们 let 一个数组 ...

  3. CTEX(LaTeX) 编译 中文

    CTEX 中文编码&编译问题 #win10 tex 文档为 GBK 编码 https://zhidao.baidu.com/question/93645685.html \documentcl ...

  4. MySQL数据库的学习

    ------------------------------------- 管理数据库PS: Mysql的管理 主要是包括 用户的管理. show........各种的信息   SHOW COLUMN ...

  5. 每天进步一点点- 资源与URI(吐血精华总结)

    1.资源(Resources) 每一个URI代表一种资源这句话的理解 ***************************************************************** ...

  6. MySQL Replication--GTID基础

    ====================================== TID(Trasaction ID)TID代表实例上已经提交的事务数量,并随着事务提交递增 UUID代表MYSQL实例的唯 ...

  7. Hasura GraphQL schema 生成是如何工作的

    不像大部分的graphql 引擎,使用标准的graphql 规范的处理模型,Hasura graphql 不存在resolver 的概念(实际上是有的,只是转换为了sql语法) 以下是Hasura g ...

  8. css属性的继承性

    不可继承属性: 盒子模型属性:width height padding border margin 背景相关属性:background相关(background-image background-si ...

  9. 适配器(Adapter)

    Adapter:将一个Class的接口转换成另一个Class的接口,使原本因接口不兼容而不能合作的Class可以一起运作.主要有两种:迭代器适配器(Iterator Adpater)和容器适配器(Co ...

  10. easyUI的datagrid每行数据添加操作按钮的方法

    今天做项目的时候,想在easyui的datagrid每一列数据后边都加上一个操作按钮,一开始想在后台拼接字符串用JSON传回,但是我测试之后发现这个方法不管用,在网上搜索了一下,整理如下: 其实要加一 ...