我想做一个猜数字游戏,当中有一步,就是在输入框JTextFiled中使用了addKeyListner,因为猜数字要求输入的数字是不重复的,类似1234,1356,这样,至于有重复的1223,必须屏蔽,现在能获得其不符合项,但是没法修改其自身的被输入的内容。求个方法。
我是直接创建了一个JTextFiled子类,在 keyTyped中能监听,并确认得知是否输入重复了,但是无法对已输入的内容作出修正,getText()能得到上一次的输入内容,但是setText()却无法修正内容,怎么办呢
package UI;import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;import javax.swing.JTextField;public class InputTextField extends JTextField { public InputTextField(int in) {
super(in);
addKeyListener(new KeyListener() { @Override
public void keyTyped(KeyEvent e) {
System.out.println(e.getKeyChar() + "," + getText());
char[] answer = getText().toCharArray();
List match = new ArrayList();
for (int i = 0; i < answer.length; i++) {
match.add(answer[i]);
}
if (match.contains(e.getKeyChar())) {
setText(getText());
System.out.println(e.getKeyChar() + "is already here:"
+ getText()); } } @Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub } @Override
public void keyPressed(KeyEvent e) { }
});
}
@Override
public void setText(String t) {
// TODO Auto-generated method stub
super.setText(t);
}
}
我是直接创建了一个JTextFiled子类,在 keyTyped中能监听,并确认得知是否输入重复了,但是无法对已输入的内容作出修正,getText()能得到上一次的输入内容,但是setText()却无法修正内容,怎么办呢
package UI;import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;import javax.swing.JTextField;public class InputTextField extends JTextField { public InputTextField(int in) {
super(in);
addKeyListener(new KeyListener() { @Override
public void keyTyped(KeyEvent e) {
System.out.println(e.getKeyChar() + "," + getText());
char[] answer = getText().toCharArray();
List match = new ArrayList();
for (int i = 0; i < answer.length; i++) {
match.add(answer[i]);
}
if (match.contains(e.getKeyChar())) {
setText(getText());
System.out.println(e.getKeyChar() + "is already here:"
+ getText()); } } @Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub } @Override
public void keyPressed(KeyEvent e) { }
});
}
@Override
public void setText(String t) {
// TODO Auto-generated method stub
super.setText(t);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货