Event Handling Muss ich 'KeyListener' tasuend mal zufügen?

arietistv

Mitglied
Hallo,
Ich habe volgende Frage:
Ich habe die Situation, dass ich ein System hinzu fügen will, welches einfach mit den Befehlen ,,public void isKeyDown(int Key){...}" und mit ,,public ArrayList<int> getKeysDown(){...}" arbeiten will. Da ich aber bisher von Event Handling kaum Ahnung habe möchte ich nun wissen, ob es möglich ist, ohne jeder Komponente den KeyListener mit component.addKeyListener(Class c); den KeyListener hnzu fügen muss.
Also ich meine nicht, dass das Programm ALLES mit kriegen muss, sondern nur, dass der Frame aktiv sein muss. Ich möchte halt einfach, dass ich (irgendwo) einfach mit z.B. if(getKeyDown(KeyCode.VK_A)){...} ab fragen kann, ob man die Taste a gedrückt hat.
Gibts da ne möglichkeit? In Unity3D gibts diesen Befehl beispielsweise und in Java kann man ihn in Greenfoot finden.
Danke im Voraus, ArietisTV
 
Vieleicht hilft dir die Methode 🙂
Java:
  public void erstelleVerhaltenFuerTaste(String key, ActionListener al) {
  ((JComponent) panel).registerKeyboardAction(al, KeyStroke.getKeyStroke(key), JComponent.WHEN_IN_FOCUSED_WINDOW);
  }

Wird so dann aufgerufen:
Java:
erstelleVerhaltenFuerTaste(KeyEvent.VK_A, (ActionEvent e) -> methode());
 
Zuletzt bearbeitet:
Danke erstamal. Aber was meinst du mit String key? Nimmt man nicht eien int bzw KeyCode?
Ich selbst hatte mir das halt so vor gestellt, dass man ein einer Klasse den Listener hat und den dann nicht zu jeder komponente hinzu fügen muss. Dann dachte ich mir, dass man in einer weiteren Klasse halt
Code:
if(isKeyDown(KeyCode.VK_A)){
    turn(15);
}
macht, z.B. wenn man mit nem Timer arbeitet.
 
kannst du mir auch bitte erklären, was der Befehl (JComponent) panel).registerKeyboardAction(al, KeyStroke.getKeyStroke(key), JComponent.WHEN_IN_FOCUSED_WINDOW) bedeutet? ich habe festgestellt, dass ich am besten mit Befehlen arbeite, wenn ich sie vertehe und nicht nur abschreibe.
Danke, ArietisTV
 
also al ist ja dein Action Listener, also in diesem Fall hier die Methode die du als ActionListener mitgibst.
dann holst du dir mit KeyStroke.getKeyStroke(key) gibt dir den KeyStroke von deiner Mitgegebenen Taste, ist also die Auslöse-Taste. Das JComponent.WHEN_IN_FOCUSED_WINDOW ist dann die Bedingung dafür, dass das Fenster fokusiert sein muss, um das Tastenkürzel auslösen zu können.
registerKeyboardAction speichert dann einfach die Action weg, also die Methode, die Taste und so 😀
und der aufruf auf das Panel am anfang bringt einfach nur, dass du das nicht auf jede komponente fügen musst.

EDIT:
Funktioniert es denn bei dir?
 
also wenn ich alles ans panel hinzu füge, dann ist das teil für alles hinzugefügte da. klar. aber ist dass nicht dennoch so, dass nach nem klick auf einen button dieser dann fokussiert ist?
Testen werde ichs später, arbeite derzeit noch an einem anderen Projekt. aber dennoch danke =)
 

Neue Themen


Zurück
Oben