说明:按下实体按键,相应虚拟按键变绿色,释放按键,变白色。

 

public class Demo extends JFrame {

    private List<JButton> list;//定义变量,否则自定义方法类中,不识别

    //    JPanel p1; 边界布局,中心区域放置文本框tf
// JPanel p2; 绝对布局,放置面板p21,p22,p23
// JPanel p21; 流布局,第一行键盘按钮
// JPanel p22; 流布局,第二行键盘按钮
// JPanel p23; 流布局,第三行键盘按钮
public Demo() {
//设置窗体大小,不可更改。
setBounds(100, 100, 548, 280);
setResizable(false);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(null);//绝对布局,上下两个Jpanel面板
//p1 边界布局,中心区域放置文本框tf
//p2 绝对布局,放置面板p21,p22,p23
//p21 流布局,第一行键盘按钮
//p22 流布局,第二行键盘按钮
//p23 流布局,第三行键盘按钮
JPanel p1 = new JPanel();
p1.setBounds(0, 0, 540, 45);
p1.setBackground(Color.WHITE);
p1.setBorder(BorderFactory.createTitledBorder("文本显示区"));
p1.setLayout(new BorderLayout());//边界布局
JTextField tf = new JTextField();
p1.add(tf, BorderLayout.CENTER);//文本框放中间区域
c.add(p1);
//面板2
//绝对布局,放置面板p21,p22,p23
JPanel p2 = new JPanel();
p2.setBounds(0, 45, 540, 205);
p2.setBackground(Color.WHITE);
p2.setLayout(null);
c.add(p2);
//面板21
//流布局,第一行键盘按钮
JPanel p21 = new JPanel();
p21.setBounds(0, 10, 540, 55);
p21.setLayout(new FlowLayout());
p2.add(p21);
//面板22
//流布局,第二行键盘按钮
JPanel p22 = new JPanel();
p22.setBounds(0, 75, 540, 55);
p22.setLayout(new FlowLayout());
p2.add(p22);
//面板23
//流布局,第三行键盘按钮
JPanel p23 = new JPanel();
p23.setBounds(0, 140, 540, 55);
p23.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 5));
p2.add(p23);
/**按钮*/
JButton btnQ = new JButton("Q");
btnQ.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnQ.setBackground(Color.WHITE);
//btnQ.setSize(45,45);//在一些布局中,setSize失效,不起作用。
btnQ.setPreferredSize(new Dimension(45, 45));
p21.add(btnQ); JButton btnW = new JButton("W");
btnW.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnW.setBackground(Color.WHITE);
btnW.setPreferredSize(new Dimension(46, 45));
p21.add(btnW); JButton btnE = new JButton("E");
btnE.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnE.setBackground(Color.WHITE);
btnE.setPreferredSize(new Dimension(45, 45));
p21.add(btnE); JButton btnR = new JButton("R");
btnR.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnR.setBackground(Color.WHITE);
btnR.setPreferredSize(new Dimension(45, 45));
p21.add(btnR); JButton btnT = new JButton("T");
btnT.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnT.setBackground(Color.WHITE);
btnT.setPreferredSize(new Dimension(45, 45));
p21.add(btnT); JButton btnY = new JButton("Y");
btnY.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnY.setBackground(Color.WHITE);
btnY.setPreferredSize(new Dimension(45, 45));
p21.add(btnY); JButton btnU = new JButton("U");
btnU.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnU.setBackground(Color.WHITE);
btnU.setPreferredSize(new Dimension(45, 45));
p21.add(btnU); JButton btnI = new JButton("I");
btnI.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnI.setBackground(Color.WHITE);
btnI.setPreferredSize(new Dimension(45, 45));
p21.add(btnI); JButton btnO = new JButton("O");
btnO.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnO.setBackground(Color.WHITE);
btnO.setPreferredSize(new Dimension(45, 45));
p21.add(btnO); JButton btnP = new JButton("P");
btnP.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnP.setBackground(Color.WHITE);
btnP.setPreferredSize(new Dimension(45, 45));
p21.add(btnP); JButton btnA = new JButton("A");
btnA.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnA.setBackground(Color.WHITE);
btnA.setPreferredSize(new Dimension(45, 45));
p22.add(btnA); JButton btnS = new JButton("S");
btnS.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnS.setBackground(Color.WHITE);
btnS.setPreferredSize(new Dimension(45, 45));
p22.add(btnS); JButton btnD = new JButton("D");
btnD.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnD.setBackground(Color.WHITE);
btnD.setPreferredSize(new Dimension(45, 45));
p22.add(btnD); JButton btnF = new JButton("F");
btnF.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnF.setBackground(Color.WHITE);
btnF.setPreferredSize(new Dimension(45, 45));
p22.add(btnF); JButton btnG = new JButton("G");
btnG.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnG.setBackground(Color.WHITE);
btnG.setPreferredSize(new Dimension(45, 45));
p22.add(btnG); JButton btnH = new JButton("H");
btnH.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnH.setBackground(Color.WHITE);
btnH.setPreferredSize(new Dimension(45, 45));
p22.add(btnH); JButton btnJ = new JButton("J");
btnJ.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnJ.setBackground(Color.WHITE);
btnJ.setPreferredSize(new Dimension(45, 45));
p22.add(btnJ); JButton btnK = new JButton("K");
btnK.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnK.setBackground(Color.WHITE);
btnK.setPreferredSize(new Dimension(45, 45));
p22.add(btnK); JButton btnL = new JButton("L");
btnL.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnL.setBackground(Color.WHITE);
btnL.setPreferredSize(new Dimension(45, 45));
p22.add(btnL); JButton btnZ = new JButton("Z");
btnZ.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnZ.setBackground(Color.WHITE);
btnZ.setPreferredSize(new Dimension(45, 45));
p23.add(btnZ); JButton btnX = new JButton("X");
btnX.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnX.setBackground(Color.WHITE);
btnX.setPreferredSize(new Dimension(45, 45));
p23.add(btnX); JButton btnC = new JButton("C");
btnC.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnC.setBackground(Color.WHITE);
btnC.setPreferredSize(new Dimension(45, 45));
p23.add(btnC); JButton btnV = new JButton("V");
btnV.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnV.setBackground(Color.WHITE);
btnV.setPreferredSize(new Dimension(45, 45));
p23.add(btnV); JButton btnB = new JButton("B");
btnB.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnB.setBackground(Color.WHITE);
btnB.setPreferredSize(new Dimension(45, 45));
p23.add(btnB); JButton btnN = new JButton("N");
btnN.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnN.setBackground(Color.WHITE);
btnN.setPreferredSize(new Dimension(45, 45));
p23.add(btnN); JButton btnM = new JButton("M");
btnM.setVerticalAlignment(SwingConstants.TOP);//位于顶部
btnM.setBackground(Color.WHITE);
btnM.setPreferredSize(new Dimension(45, 45));
p23.add(btnM); tf.addKeyListener(new MyKeyListener());//调用自定义方法 setVisible(true); /**为什么要用 List list = new ArrayList(),而不用 ArrayList list = new ArrayList()呢?
List接口有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如
LinkedList或Vector等,这时你只要改变这一行就行了:List list = new LinkedList();
其它使用了list地方的代码不需要改动。*/
list = new ArrayList<>();//创建list,用来存放所有按钮控件
Component[] items1 = p21.getComponents(); //返回容器中所有控件
Component[] items2 = p22.getComponents();//
Component[] items3 = p23.getComponents();
//p2.getComponents()只能识别到上一级子控件,控件中的控件无法识别。
//创建空的items数组,依次存放三个数组,达到合并数组的目的。
Component[] items = new Component[items1.length + items2.length + items3.length];
System.arraycopy(items1, 0, items, 0, items1.length);
System.arraycopy(items2, 0, items, items1.length, items2.length);
System.arraycopy(items3, 0, items, items1.length + items2.length, items3.length); for (Component item : items) {//找出items数组中的按钮控件
if (item instanceof JButton) {//如果这个控件是按钮,放入list中
list.add((JButton) item);//Component类强制转换为JButton类
}
}
} //在MyKeyListener上,Alt+Ins,快速创建方法。按下为绿,释放为白
class MyKeyListener implements KeyListener { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) {
char ch = e.getKeyChar();//获取实体按键的字符
for (JButton btn : list) {
String btnText = btn.getText();//获取虚拟按键的字符串
//判断字符是否相等(忽略大小写)
if (btnText.equalsIgnoreCase(String.valueOf(ch))) {
btn.setBackground(Color.GREEN);
}
}
} public void keyReleased(KeyEvent e) {
char ch = e.getKeyChar();//获取实体按键的字符
for (JButton btn : list) {
String btnText = btn.getText();//获取虚拟按键的字符串
//判断字符是否相等(忽略大小写)
if (btnText.equalsIgnoreCase(String.valueOf(ch))) {
btn.setBackground(Color.WHITE);
}
}
}
/**单独按键,构造方法
public void keyTyped(KeyEvent e) {//自动生成,不可删除
} public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();//获得实体键盘上的按键编码,getKeyChar()方法也可以
switch (code) {
case KeyEvent.VK_A://如果是实体A键的编码,窗体上的btnA变绿
btnA.setBackground(Color.GREEN);
break;
}
} public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_A:
btnA.setBackground(Color.WHITE);
break;
}
}
*/
} public static void main(String[] args) {
new Demo();
}
}

键盘监听事件KeyListener的更多相关文章

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

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

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

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

  3. JPanel添加键盘监听事件

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

  4. iOS键盘监听事件

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

  5. Cocos Creator 键盘监听事件

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

  6. Android 软键盘监听事件

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

  7. vue 键盘监听事件

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

  8. 使用HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)

    之前发布了一款简易的计算器,今天做了一下修改,添加了键盘监听事件,不用再用鼠标点点点啦 JS代码: var yunSuan = 0;// 运算符号,0-无运算;1-加法;2-减法;3-乘法;4-除法 ...

  9. C# 计算器 如果设置键盘输入的监听事件

    这个事情困扰了我好久,之前java写的计算器程序可以正常运行了,但是因为打包问题(尝试过多次,感觉好麻烦,个人比较崇尚“点子”,注重创新,思来想去之后,决定试试C#模仿java再写一遍),想要用C#模 ...

随机推荐

  1. Promise 原理

    异步:可同时好几件事,互不影响: 同步:按循序一件一件.... 异步好多缺点:.... promise就是解决异步计算的这些缺点的,主要用于: 1.异步计算: 2.可以将异步操作队列化  按期望的顺序 ...

  2. VS2013安装和单元测试

    1. VC2013安装过程及使用感受 刚上大一的时候老师推荐我们用VC++6.0.当时也就听了老师的话用VC++6.0编程了一段时间.后来上了大二买了电脑VC++6.0支持不了WIN8.1所以我就开始 ...

  3. Linux实践二:模块

    一.基本模块的实现: 1.进程遍历打印输出 2.简单地编写一个新的系统调用(替换空的系统调用号) 基本模块学到的知识点: 1.相关指令 make oldconfig 配置内核 make 编译内核 ma ...

  4. 团队作业:SRS文档-飞机大战

    本实验为团队合作项目作业的一部分:SRS文档-飞机大战 项目分工:SRS文档项目为梁JM负责完成 实验要求: 3.SRS文档(第二周,截止5月31日)              要求对所选项目进行用例 ...

  5. Oracle系列(二): Oracle表的外键查询

    在执行数据库删除操作时,外键关联是令我们最烦的一个东西,有了外键关联,就不允许随意删除数据,那么怎知道这个外键关联度的外键属于那个表? select * from user_cons_columns ...

  6. Sprint 冲刺第二阶段之1---5天(上)

    11月24号——12月8号,这一个时间段学校的电压不是很稳定,时不时会断电,为了冲刺的完整性,我们商量决定把这一时间段做的事情写成一个连贯的小日记.然后统一在整个时间段一起发出来. 经过一个阶段的努力 ...

  7. shiro课程的学习

    1.shiro的课程目标 (1)shiro的整体框架 各组件的概念 (2)shiro 认证 授权的过程 (3)shiro自定义的Reaml Filter (4)shiro session 管理 (5) ...

  8. spring mvc的工作原理

    该文转载自:http://blog.csdn.net/u012191627/article/details/41943393 SpringMVC框架介绍 1) spring MVC属于SpringFr ...

  9. Failed to execute goal org.springframework.boot

    报错 [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.0.RELEASE:ru ...

  10. FreeMarker has_content等价于StringUtils.isNotNullOrEmpty

    has_content It is true if the variable exists (and isn't Java null) and is not "empty", ot ...