【问题标题】:JTextField respond to key event AFTER the text is updatedJTextField 在文本更新后响应关键事件
【发布时间】:2016-03-02 21:57:09
【问题描述】:

现在,当我将 KeyListener 添加到 JTextField 时,我会收到一个事件,然后文本会更新。但我需要的是KeyListener 在文本更新后响应。我该怎么做呢?现在,我在另一个线程中为KeyListener 的响应设置了 10 毫秒的延迟,这足以让文本更新并且用户不会注意到。

【问题讨论】:

    标签: java swing jtextfield keylistener


    【解决方案1】:

    所以....嗯,我知道有点晚了 X)

    我通过使用 keyReleased 方法解决了这个问题,我注意到文本在关键事件之前得到更新,它应该给你这样的东西

    JTextField jtf = new  JTextField();
    jtf.addKeyaddKeyListener(new KeyListener() {
    
                @Override
                public void keyTyped(KeyEvent e) {
                    // not here
                }
    
                @Override
                public void keyReleased(KeyEvent e) {
                    // not here 
    
                }
    
                @Override
                public void keyPressed(KeyEvent e) {
                    //do the stuff here
                }
            });
    

    请注意,我不确定它为什么会起作用,但我认为它与打字速度或其他东西有关,我也不是专家,但我想提供帮助(这个问题让我发疯了几天)如果我在说任何愚蠢的话,请告诉我!

    【讨论】:

      【解决方案2】:

      不要使用 KeyListener。 Swing 拥有比 AWT 更新更好的 API。

      相反,您应该将DocumentListener 添加到JTextfieldDocument

      每当Document 更新时,就会生成一个DocumentEvent

      阅读 How to Write a DocumentListener 上的 Swing 教程部分,了解更多信息和示例。

      【讨论】:

      • 哦。我从来没有真正意识到KeyListeners 是 AWT。感谢您的回答!
      • @AlexL.,Swing 构建在 AWT 之上,因此您仍然可以访问旧 API,但应尽可能使用较新的 API。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多