问题描述
我有一个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()有帮助吗?