KeyListener a naciśnięty klawisz

0

Piszę grę, w której sterowanie odbywa się za pomocą klawiszy strzałek. Chciałbym przechwycić naciśnięcie dwóch klawiszy jednocześnie. Obsługa tych naciśnięcia tych klawiszy może być od siebie niezależna.
W tym momencie wykorzystuję interfejs KeyListener. W metodzie keyPressed(KeyEvent) mam obsługę klawiszy.
Jeżeli nacisnę jeden klawisz to oczywiście wszystko działa pięknie. Gdy nacisnę drugi klawisz, to tylko on jest przechwytywany, a ten pierwszy już nie.

0

Wciśnięcie dwóch klawiszy na raz jako takie nie istnieje - to zawsze jest sekwenca dwóch zdarzeń KeyDown. Wystarczy badać czy nastąpiła odpowiednia sekwencja KeyDown i nie nastąpiło w międzyczasie KeyUp.

0

innymisłowy...

keyPressed (...) {
    if (evt.getKeyCode==codeKlawiszaStrzałkiUp) strzalkaUp = true;
    if (evt.getKeyCode==codeKlawiszaStrzałkiLeft) strzalkaLeft = true;
}
keyReleased (...) {
    if (evt.getKeyCode==codeKlawiszaStrzałkiUp) strzalkaUp = false;
    if (evt.getKeyCode==codeKlawiszaStrzałkiLeft) strzalkaLeft = false;
}

jeżeli jednocześnie strzalkaUp==true i strzalkaLeft ==true, to obie są wciśnięte.

0

a jeszcze innymi słowy :)

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JApplet;
import javax.swing.JLabel;

public class Test79_klawiatura extends JApplet {

   boolean Key_K = false;
   boolean Key_J = false;
   JLabel pole = new JLabel();

   public void KeyWcisniete(){
     String text="";
     if (Key_K==true) {text+="K";}
     if (Key_J==true) {text+="J";}
     pole.setText("klawisze wcisniete "+text);     
   }

   public Test79_klawiatura(){
        this.add(pole); this.setLayout(null);
        pole.setBounds(0, 0, 320, 60);
        this.setFocusable(true);

        this.addKeyListener(new KeyAdapter() {
             @Override public void keyReleased(KeyEvent e) {
                if (e.getKeyChar()=='k'){  Key_K=false;   }
                if (e.getKeyChar()=='j'){  Key_J=false;   }
                KeyWcisniete();
             }
             @Override public void keyPressed(KeyEvent e) {
                if (e.getKeyChar()=='k'){  Key_K=true;  }
                if (e.getKeyChar()=='j'){  Key_J=true;  }
                KeyWcisniete();
             }
         });
   }
}
0

Dodam tylko od siebie, że większość klawiatur potrafi odczytać wciśnięcie jednocześnie 3 klawiszy. A to się czasem przydaje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1