Sensibilité du clavier inférieure dans java keyhandler?


private class KeyHandler implements KeyEventDispatcher{

    @Override
    public boolean dispatchKeyEvent(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            tetrominoList.get(currentPiece).moveRight();
    }else if(e.getKeyCode() == KeyEvent.VK_LEFT){
        tetrominoList.get(currentPiece).moveLeft();
    }else if (e.getKeyCode() == KeyEvent.VK_UP){
        System.out.print("k");
        tetrominoList.get(currentPiece).rotate();
    }


        return false;
    }

Ce code renvoie "kk" lorsque j'appuie une fois sur la flèche vers le haut. Comment puis-je configurer java ou mon ordinateur pour qu'il n'enregistre qu'une touche au lieu de deux?

EDIT: C'est ma solution temporaire

    private class KeyHandler implements KeyEventDispatcher{

    int counter = 0;
    public boolean dispatchKeyEvent(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            tetrominoList.get(currentPiece).moveRight();
    }else if(e.getKeyCode() == KeyEvent.VK_LEFT){
        tetrominoList.get(currentPiece).moveLeft();
    }else if (e.getKeyCode() == KeyEvent.VK_UP){
        counter++;
        if(counter == 2){
            System.out.print("k");
            tetrominoList.get(currentPiece).rotate();
            counter = 0;
        }
    }
Author: Andrew Thompson, 2013-05-18

1 answers

Je peux me tromper mais il semble que votre code traite à la fois les événements KEY_PRESSED et KEY_RELEASED. Vous devriez probablement vérifier un événement KEY_TYPED et une fois que cela se produit, imprimez votre lettre. Sinon, vous ne pouvez traiter qu'un seul des deux premiers événements.

 1
Author: svz, 2013-05-18 19:32:11