我声明了一个TextField input = new TextField("请输入键值");
              input.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(input.getText().equals(new String("请输入键值"))) {
//int i = e.getKeyCode();
input.setText("");
//System.out.println(i);
}
}
});               然后我就是想不明白了,在我随便按下一个键之后,为什么在TextField中这个按键会被显示出来呢?我不是调用了input.setText("")方法吗?应该为空啊

解决方案 »

  1.   

    你想要的结果应该写在这个方法里
    public void keyTyped(KeyEvent e)
    键入某个键时调用此方法。当按下键然后又释放该键时发生此事件。
    现在楼主你写的方法是按下某键时会执行方法里的代码,
    但是放开那个键后,TextField里肯定会有你按的键值。
      

  2.   

    1楼的说法也不对,即便重写这个适配器的所有方法后,仍然会有同样的问题。
    我想原因是:即使你不增加监听器,输入一个字符后,仍然会显示出来。
    这就是说,虽然你的方法里,已经将其置为空了,但之后,TextField自身功能仍会将你输入的字符显示出来的。这个不是由按键事件产生的!
    至于怎样才能达到LZ希望的目标,我也不知道。或许可能考虑正则表达式或Document。
      

  3.   

    你试试在release那个方法中写吧,那个是当你释放按键时调用的方法.
      

  4.   

    那样不行的。
    input.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
    e.setKeyCode(KeyEvent.VK_CANCEL);
    e.setKeyChar((char)0);
    System.out.println("abcdef");
    } @Override
    public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub
    e.setKeyCode(KeyEvent.VK_CANCEL);
    e.setKeyChar((char)0);
    }
    });
    这样的代码可以不响应输入。