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

 

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. 最近新明白的SQL小知识

    1.partition by和order by 先看三个小需求: ①查询出各个类编号的书本的数量. select count (类编号) as 数量, 类编号 from Books group by ...

  2. linux内核分析程序破解实践报告

  3. 基于SSH 供应链管理系统质量属性说明

    产品的易用程度如何,执行速度如何,可靠性如何,当发生异常情况时,系统如何处理.这些被称为软件质量属性,而特性是指系统非功能(也叫非行为)部分的需求. 性能:性能就是一个东西有多快,通常指响应时间或延迟 ...

  4. 软件工程APP进度更新

    对原有的界面进行了美化,同时加进了背景音乐,并且优化了算法部分的代码 正在一步一步跟进中 顺带附上上一次组员帮我发的进度地址:http://www.cnblogs.com/case1/p/498192 ...

  5. beta 答辩总结

    评审表 编号 团队名称 项目名称 格式 内容 PPT 演讲 答辩 总分/100 1 天机组 指尖加密 14 13 13 13 13 66 2 PMS Your eyes 14 14 17 14 15 ...

  6. pandas(DataFrame)

    DataFrame是二维数据结构,即数据以行和列的表格方式排列!特点:潜在的列是不同的类型,大小可变,标记行和列,可以对列和行执行算数运算. 其中Name,Age即为对应的Columns,序号0,1, ...

  7. Issue: business key in a call activiti

    https://community.alfresco.com/thread/221280-business-key-in-a-call-activity 这个帖子有一些讨论和回复. https://c ...

  8. Character Encoding Issues for tomcat

    https://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8 https://stackoverflow.com/questions/10936846 ...

  9. Docker(二十)-Docker容器CPU、memory资源限制

    背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...

  10. Linux中gcc与g++编译器的区别

    一.对于C文件 对于C文件gcc和g++所做的事情确实是一样的,g++在编译C文件时调用了gcc. 二.对于C++文件 1.预处理 预处理gcc与g++做了相同的事. 2.编译 gcc无法自动和c++ ...