Java裏Swing的鍵盤檢測案例實戰練習代碼(7)

鍵盤檢測程序運行後的效果如下圖所示:
在這裏插入圖片描述

實現的代碼參考

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();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章