键盘检测程序运行后的效果如下图所示:
实现的代码参考
package top.linksinke.demo;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
* 键盘按键检测的案例程序<br/>
* create by LINKSINKE on 2020/2/29
*/
public class CheckKeyboard extends JFrame {
public CheckKeyboard() {
// 设置close按钮的操作(关闭窗口并且停止程序的运行)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口默认显示的位置和大小
this.setBounds(300, 200, 500, 233);
// 窗口不能够最大化显示(最大化按钮禁用,并且不能拖拽窗体的大小)
this.setResizable(false);
// 设置窗口的标题文字
this.setTitle("键盘按键检测程序");
// 获取容器对象
Container ctainer = this.getContentPane();
// 设置布局方式为流式布局
ctainer.setLayout(null);
// 文本输入框
JLabel lb = new JLabel("内容:");
lb.setBounds(12, 2, 45, 35);
lb.setForeground(Color.red);
JTextField txt = new JTextField(40);
txt.setBounds(50, 5, 400, 25);
// 键盘区域
Panel p1 = new Panel();
p1.setLayout(new FlowLayout());
p1.setBounds(0, 35, 500, 233);
// 取得按钮集合并添加到容器对象里面
final List<JButton> btnLis = createKeyboardLayout();
for (int i = 0; i < btnLis.size(); i++) {
p1.add(btnLis.get(i));
}
// 向容器中添加文本标签、文本输入框、面板组件
ctainer.add(lb);
ctainer.add(txt);
ctainer.add(p1);
// 添加文本框的键盘监听事件
txt.addKeyListener(new KeyListener() {
// 发生击键时被触发
@Override
public void keyTyped(KeyEvent e) {
}
// 按键被释放时被触发
@Override
public void keyReleased(KeyEvent e) {
// 获取键入的键盘字符
char letter = e.getKeyChar();
/**
* 循环判断输入的值是否和btnLis集合里的值是否一样<br/>
* 如果输入的内容和按钮上的文字内容一样就设置背景颜色
*/
for (JButton jButton : btnLis) {
String btnStr = jButton.getText();
// 判断jButton上的文本是否和输入的内容一样(忽略了大小写)
if (btnStr.equalsIgnoreCase(String.valueOf(letter))) {
jButton.setBackground(Color.WHITE);
}
}
}
// 按键被按下(手指按下键盘并未松开)时被触发
@Override
public void keyPressed(KeyEvent e) {
// 获取键入的键盘字符
char letter = e.getKeyChar();
/**
* 循环判断输入的值是否和btnLis集合里的值是否一样<br/>
* 如果输入的内容和按钮上的文字内容一样就设置背景颜色
*/
for (JButton jButton : btnLis) {
String btnStr = jButton.getText();
// 判断jButton上的文本是否和输入的内容一样(忽略了大小写)
if (btnStr.equalsIgnoreCase(String.valueOf(letter))) {
jButton.setBackground(Color.BLUE);
}
}
}
});
// 设置窗口是否显示(true为显示窗口,false为不显示窗口)
this.setVisible(true);
}
/**
* 创建一个键盘布局
*
* @return JButton对象集合
*/
public List<JButton> createKeyboardLayout() {
// 键盘上的文字
String[] str = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "Q", "W", "E", "R", "T", "Y", "U", "I", "O",
"P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", "B", "N", "M" };
// 存放JButton对象
List<JButton> btnLis = new ArrayList<JButton>();
// 循环创建JButton对象并添加至集合里
for (int i = 0; i < str.length; i++) {
JButton btn = new JButton(str[i]);
btn.setFont(new Font("微软雅黑", Font.ITALIC, 12));
btn.setBackground(Color.WHITE);
btn.setBorderPainted(false);
btnLis.add(btn);
}
return btnLis;
}
public static void main(String args[]) {
JFrame jframe = new CheckKeyboard();
}
}