鍵盤檢測程序運行後的效果如下圖所示:
實現的代碼參考
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();
}
}