web-dev-qa-db-fra.com

Comment vérifier si l'utilisateur appuie sur une touche?

Dans Java j'ai un programme qui doit vérifier en permanence si un utilisateur appuie sur une touche. Donc, dans psuedocode, quelque chose comme

if (isPressing("w"))
{
 //do somthing
}

Merci d'avance!

26
Saucymeatman

Dans Java vous ne vérifiez pas si une touche est enfoncée, vous écoutez à KeyEvents. La bonne façon d'atteindre votre objectif consiste à vous enregistrer un KeyEventDispatcher, et l'implémenter pour maintenir l'état de la clé souhaitée:

import Java.awt.KeyEventDispatcher;
import Java.awt.KeyboardFocusManager;
import Java.awt.event.KeyEvent;

public class IsKeyPressed {
    private static volatile boolean wPressed = false;
    public static boolean isWPressed() {
        synchronized (IsKeyPressed.class) {
            return wPressed;
        }
    }

    public static void main(String[] args) {
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {

            @Override
            public boolean dispatchKeyEvent(KeyEvent ke) {
                synchronized (IsKeyPressed.class) {
                    switch (ke.getID()) {
                    case KeyEvent.KEY_PRESSED:
                        if (ke.getKeyCode() == KeyEvent.VK_W) {
                            wPressed = true;
                        }
                        break;

                    case KeyEvent.KEY_RELEASED:
                        if (ke.getKeyCode() == KeyEvent.VK_W) {
                            wPressed = false;
                        }
                        break;
                    }
                    return false;
                }
            }
        });
    }
}

Ensuite, vous pouvez toujours utiliser:

if (IsKeyPressed.isWPressed()) {
    // do your thing.
}

Vous pouvez, bien sûr, utiliser la même méthode pour implémenter isPressing("<some key>") avec une carte de clés et leur état intégré dans IsKeyPressed.

42
Elist

Essaye ça:

import Java.awt.event.KeyAdapter;
import Java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Main {

    public static void main(String[] argv) throws Exception {

    JTextField textField = new JTextField();

    textField.addKeyListener(new Keychecker());

    JFrame jframe = new JFrame();

    jframe.add(textField);

    jframe.setSize(400, 350);

    jframe.setVisible(true);

}

class Keychecker extends KeyAdapter {

     @Override
     public void keyPressed(KeyEvent event) {

     char ch = event.getKeyChar();

     System.out.println(event.getKeyChar());

}
2
Simmant
0
Java Panter