Abfrage, ob Key gedrückt gehalten wird ??

Status
Nicht offen für weitere Antworten.

FinalbrainXP

Aktives Mitglied
Hi, habe ein kleines Problem mit der Behandlung von Key-Events.
Und zwar geht es um das Keylistener-Interface, welches ich in meinem Projekt eingebunden habe.
Dieses funktioniert so ganz gut, doch ich brauche etwas spezielles:

Ich muss EIN Signal bekommen, wenn eine bestimmte Taste gedrückt gehalten wird,
und EIN Signal, wenn diese wieder losgelassen wird.


Dies habe ich so realisiert:
Code:
public void keyReleased(KeyEvent e) 
{
    if (key >=0 && key < 256) 
            keyField[e.getKeyChar()] = false;  
}
    
public void keyPressed(KeyEvent e)
{
     if (key >=0 && key < 256) 
            keyField[e.getKeyChar()] = true;  
}



Das klappt auch wunderbar...mit dieser Lösung kann ich das Array keyField[] immer abfragen, wann gerade welche Taste gedrückt gehalten wird. Das Problem ist aber, dass ich manchmal das keyReleased()-Event
selbst erzeugen/simulieren will.

Das bedeutet im Klartext.

Ich drücke die Taste 'a', halte diese gedrückt. Somit ist keyfield['a'] auf true gesetzt.
bevor ich die Taste aber nun loslasse und die Methode keyReleased mir das keyfield['a'] wieder auf false setzt,
möchte ich vorher keyfield['a'] selber "manuell" auf false setzen. Also quasi die Taste früher loslassen, als der
Benutzer sie eigentlich loslässt. Das Problem ist, dass aber keyPressed bei einer gedrückten Taste nicht nur einmal feuert..sondern dauerfeuert......weiss da jemand ne Abhilfe/Lösung für mich ?

Vielen Dank im vorraus für eure Hilfe 🙂

Gruß

Final
 
du wirst die externen KeyEvents nicht so einfach modifizieren können,
aber du kannst dir doch im Listener die Änderung merken,
z.B. eine Exemplarvariable
boolean manualKeyRelease;
auf true setzen und diese in keyPressed berücksichtigen
 
Vielen Dank für die schnelle Antwort. Ja..externe Ereignisse werde ich wohl nicht modifizieren können.
Deine Lösung scheint mir am brauchbarsten, obwohl ich mir erhofft hatte, das es da noch irgend eine Funktion/Flag gibt, mit dem ich das KeyPressed-Ereignis weiter einkreisen könnte, sowas wie..firecount..oder sowas..^^
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben