按Enter键时,Textfield中的KeyListener不会触发

Mir*_*ral 5 java swing awt keylistener listener

我正在尝试制作一个程序,可以将华氏度转换为java中的celcius.在程序中我有2个标签和1个TextField用于输入.我想在用户输入温度并按下时转换温度Enter.为此,我在文本字段中添加了一个关键监听器,但它不起作用.当我按下Enter听众时根本不开火.

这是我的代码.

public class TempConv extends JFrame{

private JLabel info;
private JLabel result;
private JTextField input;
private String outcome;

public TempConv(){

    super("Temperature Converter");
    setLayout(new BorderLayout());

    info = new JLabel("Enter Fahrenheit Temperature");
    add(info, BorderLayout.NORTH);

    input = new JTextField(12);
    add(input, BorderLayout.CENTER);

    result  = new JLabel("Temperature in Celcius is: " + outcome);
    add(result, BorderLayout.SOUTH);

    input.addKeyListener(
            new KeyListener(){

                public void keyPressed(KeyEvent e){

                    if(e.getKeyChar() == KeyEvent.VK_ENTER){

                        outcome = input.getText();
                    }       
                }
            }
        );
}

public static void main(String[] args) {


    TempConv ftc = new TempConv();
    ftc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ftc.setLocationRelativeTo(null);
    ftc.setSize(370, 100);
    ftc.setVisible(true);


}

}
Run Code Online (Sandbox Code Playgroud)

编辑:它适用于ActionListener,但我需要使用匿名类.它没有匿名课程Enter.

Sin*_*int 5

尝试使用e.getKeyCode()而不是e.getKeyChar().常量KeyEvent.VK_ENTER是一个int,而不是char.

换一种说法:

if(e.getKeyCode() == KeyEvent.VK_ENTER){
      outcome = input.getText();
}
Run Code Online (Sandbox Code Playgroud)

代替

if(e.getKeyChar() == KeyEvent.VK_ENTER){
      outcome = input.getText();
}
Run Code Online (Sandbox Code Playgroud)