【问题标题】:JTextField keyevent handling issueJTextField 键事件处理问题
【发布时间】:2011-01-23 12:50:57
【问题描述】:

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

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

但是每次我在 JTextField 中输入 enter 时,什么都没有发生,即没有打印。

【问题讨论】:

    标签: jtextfield


    【解决方案1】:

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

    【讨论】:

    • 是的,keyevent 处理程序正在响应,但是如何让我的 jtextfield 响应“enter”键事件?
    【解决方案2】:

    我认为您在比较错误的值。 e.getKeyCode() 返回密钥,那么我猜KeyEvent.VK_ENTER 是真正不同的东西。

    【讨论】:

      【解决方案3】:

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

      我试图发布一个我用来让它工作的代码模板,但它的浏览和缩进有点长,所以如果你真的需要它,我会通过一些电子邮件将它发送给你地址什么的

      【讨论】:

      • 如果您发布您的 sn-p,选择它,然后单击大括号符号,它会缩进并突出显示
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        你必须在你的类定义中实现 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" );
            }
        });
        

        【讨论】:

          猜你喜欢
          • 2019-08-03
          • 1970-01-01
          • 2012-04-30
          • 2011-05-16
          • 1970-01-01
          • 1970-01-01
          • 2021-11-13
          相关资源
          最近更新 更多