KeyListener dans Textfield qui ne se déclenche pas lorsque vous appuyez sur entrée

Je suis en train de faire un programme qui convertit les degrés fahrenheit en celsius en java. Dans le programme, j'ai 2 Étiquettes et 1 TextField pour l'entrée. Je souhaite faire convertir la température lorsque l'utilisateur des types de la température et de presses Entrée. Pour ce faire, j'ai ajouté un écouteur de mon textfield mais ça ne fonctionne pas. Lorsque j'appuie sur Entrée auditeur de ne pas tirer.

Et voici mon code.

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);


}

}

Edit: Il fonctionne avec ActionListener mais j'ai besoin de le faire avec une classe anonyme. Sans classe anonyme il tire avec Entrée.

L'événement est consommé plus haut dans la chaîne d'événements, il est donc jamais arriver à vous, il vaut mieux utiliser raccourcis clavier - Effectivement, il est préférable d'utiliser un ActionListener pour ce que vous êtes en train de faire - c'est ce qu'il est destiné - souvenez-vous, [Enter] n'est pas toujours la touche "j'accepte" pour chaque plate-forme 😉
J'ai été tenté d'utiliser l'action de l'auditeur. Tout allait si bien jusqu'à ce que je ne trouve pas comment vérifier si la touche entrée est pressée ou pas dans ActionListener.
Est-il question? À partir d'une plate-forme indépendante de point de vue, la ActionListener sera déclenché lorsque l'utilisateur déclenche la "accepter" action pour cette plate-forme. Il se trouve que pour la plupart des plates-formes, c'est la touche [Enter].
", ai-je tort?" Oui..et non. KeyListener est à un niveau faible, une API pour ce que vous essayez d'atteindre. Si vous voulez VRAIMENT pour surveiller la touche [Enter], alors vous allez avoir à remplacer la clé de liaison commencer utilisée par le champ de texte. Toutefois, cette situation va changer la façon dont l'application peut fonctionner sur d'autres plates-formes, d'où la raison pour la ActionListener. Cela permet à l'aspect et la convivialité de décider sous quelles conditions la ActionListener est déclenché. Dans la plupart des plates-formes, c'est la touche [Enter]...
Hmm.. je obtenir votre point de vue. Je vais me concentrer sur ActionListener ensuite.

OriginalL'auteur Miral | 2013-01-13