目录及源码链接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;
}
}
}