微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多次调用KeyPressed事件

如何解决多次调用KeyPressed事件

我有一个jTextField,并向其中添加一个键侦听器。因此,如果我键入一些内容并按 Enter 键,则会调用keypressed事件,然后我将保存所有键入的内容

但是,如果我按 Enter 键,它将被调用3次。

tPatientName.addKeyListener(new java.awt.event.KeyAdapter() {
        @Override
        public void keypressed(java.awt.event.KeyEvent e) {
              if(e.getKeyCode() == KeyEvent.VK_ENTER) {
                  System.out.println("Saved Successfully");
              }
        }
    }); 

控制台输出

Saved Successfully
Saved Successfully
Saved Successfully

我不知道我的代码有什么问题。 预先感谢。

解决方法

我根据您告诉我们的内容创建了一个MRE,它的工作原理没有任何问题。随意用我的小例子比较您无法与我们分享的任何神秘代码。

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class EnterKeyTest
{
    JFrame frame;
    JPanel panel;
    JTextField tPatientName;
    
    public EnterKeyTest()
    {
        initGUI();
    }
    
    public static void main(String[] args)
    {
        EnterKeyTest e = new EnterKeyTest();
    }
    
    private void initGUI()
    {
        frame = new JFrame();
        panel = new JPanel();
        
        tPatientName = new JTextField(15);
        tPatientName.addKeyListener(new KeyAdapter()
        {
            @Override
            public void keyPressed(KeyEvent e)
            {
                if(e.getKeyCode() == KeyEvent.VK_ENTER)
                {
                    System.out.println("Saved Successfully");
                }
            }
        });
        
        panel.add(tPatientName);
        frame.add(panel);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

,

我找到了原因。我已将jTextField声明为静态。

我是这样的:

public static JTextField tPatientName= new JTextField();

删除static关键字后,它开始起作用。

但是,为什么要使用static关键字呢?

,

将keyPressed()更改为keyReleased()有帮助吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。