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();
	}
}
发布了68 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_29001539/article/details/104575539