我想做一个猜数字游戏,当中有一步,就是在输入框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);
}
}

解决方案 »

  1.   

    不要监听Key事件,而是监听Change事件,因为如果客户选择纯鼠标复制-粘贴,不会触发Key事件。另外,如果想对不合法的按键操作进行屏蔽,请调用event.consume()方法,不让这个事件向更底层的监听器(swing本身的)进行传递。
      

  2.   

    event.consume(),感谢就是这个。顺便能在多问下吗?怎么能做到对JtextFiled添加一个MouseListener后,当MousePressed监听到点击时,能将JtextFiled中所有的内容全选?
      

  3.   

    感谢shine333,如果后续还有问题可以私信问您吗?