键盘监听事件KeyListener
说明:按下实体按键,相应虚拟按键变绿色,释放按键,变白色。

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的更多相关文章
- js 获取当前焦点所在的元素、给元素和input控件添加键盘监听事件、添加页面级的键盘监听事件
页面级的键盘监听事件 document.onkeydown = function (event) { var e = event || window.event || arguments.callee ...
- [置顶] java Gui 键盘监听事件
简单写一个java Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键.比如:按下A控制台就输出A 效果如图: 以下把实现的效果分为几个步骤: 1.新建一个窗体类继承窗体: 2.给这个窗体 ...
- JPanel添加键盘监听事件
因为在自己的游戏需求中谢了要用键盘控制飞机的移动,所以用到键盘监听事件,但是使用了JPanel之后添加了键盘监听事件,按相应的方向键飞机并没有反应.但是如果是为JFrame的内容面板加则会有反应. 为 ...
- iOS键盘监听事件
1.注册键盘通知事件 NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; // 键盘将出现事件监听 [center ...
- Cocos Creator 键盘监听事件
键盘事件键盘.设备重力传感器此类全局事件是通过函数 cc.systemEvent.on(type, callback, target) 注册的.cc.SystemEvent.EventType.KEY ...
- Android 软键盘监听事件
Android软键盘的隐藏显示研究 Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入. 那么,弹出软键盘后必然会造成原有布局高度的减少 ...
- vue 键盘监听事件
<template> <div class="hello"> <input v-on:keyup.enter="submit" t ...
- 使用HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
之前发布了一款简易的计算器,今天做了一下修改,添加了键盘监听事件,不用再用鼠标点点点啦 JS代码: var yunSuan = 0;// 运算符号,0-无运算;1-加法;2-减法;3-乘法;4-除法 ...
- C# 计算器 如果设置键盘输入的监听事件
这个事情困扰了我好久,之前java写的计算器程序可以正常运行了,但是因为打包问题(尝试过多次,感觉好麻烦,个人比较崇尚“点子”,注重创新,思来想去之后,决定试试C#模仿java再写一遍),想要用C#模 ...
随机推荐
- SpringCloud设定Feign底层实现
1. 概述 版本: spring-boot: 1.5.9.RELEASE spring-cloud: Dalston.SR5 在默认情况下 spring cloud feign在进行各个子服务之间的 ...
- Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)-A-Single Wildcard Pattern Matching
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> ...
- 《Linux内核分析》第13章
<Linux内核设计与实现>第十三章--虚拟文件系统概述 20135211 一.通用文件系统接口 之所以可以使用这种通用接口(VF)对所有类型的文件系统进行操作,是因为内核在它的底层文件系 ...
- MSF MS11-050/10-087/Adobe攻击实践及内存保护技术
MSF MS11-050/10-087/Adobe攻击实践及内存保护技术 内存攻击指的是攻击者利用软件安全漏洞,构造恶意输入导致软件在处理输入数据时出现非预期错误,将输入数据写入内存中的某些特定敏感位 ...
- 读书笔记(chapter7)
第七章 链接 链接是将各种代码和数据部分收集起来并且组合成为一个单一文件的过程.1.这个文件可被加载到存储器并执行:2.也可以执行于加载时,也就是在程序被加载器加载到存储器并执行:3.甚至可以执行于运 ...
- 20135327--linux内核分析 实践二
内核模块编译 1.实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率很高,但可扩展性 ...
- java中定时执行任务
现在项目中用到需要定时去检查文件是否更新的功能.timer正好用于此处. 用法很简单,new一个timer,然后写一个timertask的子类即可. 代码如下: package comz.autoup ...
- 安装MySQL和其他包
安装 MySQL 1. 下载 MySQL 安装包 记得要下载 msi 可执行文件,而不是源码包. https://dev.mysql.com/downloads/file/?id=474803 这个安 ...
- Wordpress 更新时 不输入ftp相关信息的方法
From 百度知道 我自己机器上面的处理过程为: cd /usr/share/nginx/html vim wp-config.php 在配置文件里面插入这三行 define("FS_MET ...
- 通过几个例子看sed的模式空间与保持空间
SED之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(holdingspace)这2个空间的使 ...