我正在尝试创建一个keylistener,用于检测用户何时点击“enter”键,但每次编译时都会出现错误:
NameBox.java:6: error: NameBox is not abstract and does not override
abstract method keyPressed(KeyEvent) in KeyListener
public class NameBox extends JFrame implements KeyListener
^
在我下面提供的课程中,我确信我正确地实现了正确的关键听众,但显然我没有。如果有人能够解释为什么我仍然会收到这个错误,那就太棒了!
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class NameBox extends JFrame implements KeyListener
{
String userWord = "";
JTextField userInput = new JTextField(20);
JButton submit = new JButton("Submit");
public NameBox()
{
super("Enter your name");
JPanel centerPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 15));
setSize(400, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
submit.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent evt)
{
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
{
submitAction();
}
}
});
centerPanel.add(userInput);
JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 15));
southPanel.add(submit);
Box theBox = Box.createVerticalBox();
theBox.add(Box.createVerticalStrut(100));
theBox.add(centerPanel);
theBox.add(Box.createVerticalStrut(200));
theBox.add(southPanel);
add(theBox);
}
private void submitAction()
{
userWord = userInput.getText();
}
public static void main(String[] args)
{
new NameBox().setVisible(true);
}
@Override
public void keyTyped(KeyEvent e){}
@Override
public void keyReleased(KeyEvent e){}
}
答案 0 :(得分:1)
您包含keyTyped
和keyReleased
方法,但KeyListener
界面要求您还包含keyPressed
方法,即使它与其他方法一样空白。要解决此问题,您可以添加public void keyPressed(KeyEvent e){}
。
答案 1 :(得分:0)
考虑使用Lambda表达式,它非常简单,只需在您的情况下使用。
written
written
written
Lambda表达式可以完全摆脱内部的ActionListener类。 我不确定原因,但TextField的默认操作是监听"输入"键。
此外,如果你想保留你的ActionListener,你必须覆盖keylistener的其他方法,即使该动作有一个空的定义。
userInput.addActionListener(e -> submitAction());