打字游戏之输入框功能的实现

目录及源码链接https://blog.csdn.net/coolyuan/article/details/107169180

要求

①输入三位数自动与屏幕中显示的数字比较,若相同则消除并重新生成数字,记录得分
②输入空格暂停,暂停时输入任意字符继续游戏

实现方法

新建一个JPanel,并在其中添加一个JTextField来获取输入的内容。

①实现功能输入三位数自动提交

往JTextField中添加一个继承适配器抽象类的匿名内部类来监听键盘事件。

键盘监听的方法有KeyPressed()、KeyTyped()、KeyReleased()。
下面我先进行一个测试,测试在这些方法中用文本框的getText()获取的文本框内容的差别:
先输入数字4,再输入数字5,
可见KeyPressed和KeyTyped会在你输入的文本字符添加到文本框之前调用,因此,为了要达到我们需要的目的,我就将长度比较的代码写在KeyReleased方法中。
在这里插入图片描述
方法如下:每次往文本框键入内容监听文本框内容的长度,若文本框长度大于等于3则用setText("")来清空文本框内容。

ps:
1.关于为何要大于等于三而不是单纯等于三的原因,是被我一个Hentai舍友试出来的,趁着键盘监听不注意,对着输入框一顿暴风输入,结果如下:
在这里插入图片描述
他输入的长度早比三大了,但是键盘监听器并不清空文本框输入的内容,因此要提防这种输入过快的情况,就需要将等于三改为大于等于三。
2.但是如果按照我的方法将代码都添加到KeyReleased中,会出现以下问题:     一是如果你的输入速度过快,会出现无法识别的现象。
    二是如果你长按一个数字,文本框的文本会一直增加到你放下按键才会清空,我试过在KeyPressed中输入的文本检测长度,但是效果不佳,也就放弃了,有兴趣的读者可以去想办法解决看看。

②消除匹配的列并再生成新的列

当每次输入长度大于等于三时,获取文本框输入的内容,然后与之前建立的字符数组进行比较,若相同,则用讲过的生成随机数的方法再生成一个随机数(记得保证首位与其他的相同,而且要将其纵坐标置为原来的初始下落位置)

 if (in.getText().length() >= 3) {
                          
           input = in.getText();
           in.setText("");               
           for (int i = 0; i < N; i++) {
             if (input.equals(num[i])) {
                  y[i] = 50;
               }
             num[i] = Integer.toString((int) (Math.random() * 900 + 100));
            while (true) {
               for (int j = 0; j < N; j++) {
                   if (num[i].charAt(0) == num[j].charAt(0) && i != j)
                    {
                        num[i] = Integer.toString((int) (Math.random() * 900 + 100));
                        j = -1;
                     }
                                           }
                       break;
                          }
                                }
 }
                       
                      
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值