键盘监听事件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#模 ...
随机推荐
- poj 1723 SOLDIERS 带权中位数
题目 http://poj.org/problem?id=1723 题解 带权中位数类型的题目~ 可以先考虑降维,最后集合的y坐标,明显是y坐标的中位数的位置,容易求出y方向的贡献res_y.比较麻烦 ...
- Android中加解密算法大全
Base64编码 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,本质上是一种将二进制数据转成文本数据的方案,对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次 ...
- 实验十一 团队作业7—团队项目设计完善&编码测试
实验十一 团队作业7—团队项目设计完善&编码测试 实验时间 2018-6-8 Deadline: 2018-6-20 10:00,以团队随笔博文提交至班级博客的时间为准. 评分标准: 按时交 ...
- MySQL基础知识——范式与事务
几个概念 在说范式之前,要先了解几个概念: 关系模式 关系模式的5要素:R(U,D,DOM,F) 用下面这个category表来理解上面这个式子 mysql> desc student; +-- ...
- [CB]2018年中国智能手机市场出货量
Canalys:2018年中国智能手机市场出货量同比跌逾14% https://www.cnbeta.com/articles/tech/813267.htm 市场调研机构Canalys今日公布中国智 ...
- CentOS下使用VirtualBox 安装 Windows虚拟机的简单方法
1.物理服务器安装CentOS7.5 2. 安装VNC 3. 关闭防火墙,关闭selinux,上传virtualbox的rpm包. http://download.virtualbox.org/vir ...
- children和childNodes 的区别
1.childNodes 属性,标准的,它返回指定元素的子元素集合,包括html节点,所有属性,文本.可以通过nodeType来判断是哪种类型的节点,只有当nodeType==时才是元素节点,是属性节 ...
- panda迭代
1.注意 - 不要尝试在迭代时修改任何对象.迭代是用于读取,迭代器返回原始对象(视图)的副本,因此更改将不会反映在原始对象上. 2.itertuples()方法将为DataFrame中的每一行返回一个 ...
- entity framework 缓存干扰的数据不一致问题
本来EF的设计上DbContext就应该是一个短暂存在的对象,所以它默认才开了缓存和自动检测对象修改之类的功能,而且不是线程安全的.理想的生命周期应该是处理一次请求使用一个context,全局使用会带 ...
- codeforces622B
The Time CodeForces - 622B 给你当前的时间(24小时制):HH:MM.输出 x 分钟后的时间是多少?(24小时制) 不明白可以看看例子哦- Input 第一行给出了当前时间, ...