public void KeyPressed(KeyEvent e)兄台,你尴尬了,把KeyPressed写成keyPressed就行了……如果JDK1.5以上,建议方法上加一个@Override的注记,写了以后如果不是重写的话,通不过编译的,可以把逻辑问题转到编译阶段发现。

解决方案 »

  1.   

    爆汗
    但是我更正后,发现,class keyenter extends KeyAdapter{
            public void keyPressed(KeyEvent e){
                if(e.getKeyChar()=='H')
                    txf.setText("H");
                System.out.println(e.getKeyChar());
            }其中仍然不能设置txf中的内容,但是命令行输出e.getKeyChar()倒是有的。
      

  2.   

    刚刚变更内容为class keyenter extends KeyAdapter{
            public void keyPressed(KeyEvent e){
                if(e.getKeyCode()=='H')
                    txf.setText("H");
                System.out.println(e.getKeyChar());
            }就可以。我看到提示里写的getKeyCode这个方法是int型啊难道是等号右端‘H’字符做了转换?
    为什么getKeyChar不成功呢?
      

  3.   

    还有,一个问题,就是当我按下H键后,txf内容被置为H后为什么在后面还会带有一个h,输出在txf的内容是:Hh
      

  4.   

    首先提醒楼主的是不应该用if(e.getKeyCode()=='H')来判断是否按下'H',而应该用if(e.getKeyCode()==KeyEvent.VK_H)来判断。另外,出现Hh是因为你在按下'H'键以后,触发了keyPressed事件,此时将文本框设为'H',然后再响应你键盘的按键,在文本框中输入了'h',因为你没有阻止这个事件的发生,如果要阻止的话,比较简单的方法是写一个类继承PlainDocument,重写里面的insertString方法,然后调用文本框的setDocument方法设置进去。
      

  5.   


    class HDocument extends PlainDocument {
    class HDocument extends PlainDocument {
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
    if (!str.equalsIgnoreCase("H")) {
    super.insertString(offs, str, a);
    }
    }
    }
    }
    然后调用文本框的setDocument方法设置进去就行了,不过这个写得比较简略。
      

  6.   

    呃,手一抖,多整了一个class,汗,楼主见谅……
      

  7.   

    手一抖能拌出一个class来,楼上才是真正的高手