JTextField keyevent处理问题

时间:2010-03-04 05:03:27

标签: jtextfield

.getKeyCode()不返回键的int值吗?因为我已将JTextField设置为侦听keylistener,并且在keytyped方法中,我检查已按下了哪个键。这是我的代码片段:

JTextField jtf = new JTextField( );
jtf.addKeyListener( this );
.
.
.
public void keyTyped( KeyEvent e )
{
  if( e.getKeyCode( ) == KeyEvent.VK_ENTER ) System.out.println( "pressed enter" );
}

但是每当我输入JTextField时,都没有任何反应,即没有打印。

5 个答案:

答案 0 :(得分:0)

也许你应该首先检查你是否在按下任何东西时实际调用了事件处理程序...或者如果你的事件处理程序能够接收KeyEvents对象,我相信问题就在那里......为了它起作用,组件必须具有焦点...... Java Tutorial

答案 1 :(得分:0)

我认为你正在比较错误的价值观。 e.getKeyCode()返回密钥,然后我认为KeyEvent.VK_ENTER是真正不同的东西。

答案 2 :(得分:0)

VK_ENTER对应于回车键的int值,看它是如何常量。您应该使用swing类中的输入和动作映射来监听JTextField处于焦点时的键值,而不是将键侦听器应用于文本字段并侦听一个键。因为每次按下某个键时都会创建一个事件(尽管可能会或可能不会处理),但是当按下不是回车键的键时,应该阻止该方法运行。因此,防止运行时错误和不必要的方法调用。

答案 3 :(得分:0)

我只是想出了一个更好的方法。你应该将所有的键方法放在主类的内部类中,将你的GUI构造代码再次放在main方法的一个构造函数方法中。现在。你有内部方法实现KeyListener接口,并实例化与所述接口关联的三个抽象方法,你只使用keyTyped(KeyEvent e)方法。在该方法中,实例化一个名为keyHit的int变量并将其赋值给e.getKeyChar();然后输入一个if语句,声明if(keyHit =='\ n')\ n是否相应于ENTER键,

我试图发布一个代码模板以使其工作,但是要经过一段时间并缩进,所以如果你真的需要它我会通过一些电子邮件发送给你地址或其他东西

答案 4 :(得分:0)

您必须实施 KeyListener 接口并覆盖类定义中的 keyTyped 方法才能使用

jtf.addKeyListener(this).

替换上面的行
jtf.addKeyListener(new KeyAdapter(){

    @Override
    public void keyTyped(KeyEvent e) {
        if( e.getKeyCode( ) == KeyEvent.VK_ENTER )   
            System.out.println( "pressed enter" );
    }
});