KeyListener-Alternative ohne anfängliches Delay ?

Status
Nicht offen für weitere Antworten.

kopfsalat

Bekanntes Mitglied
Hallo!
Ich suche eine Möglichkeit, die (Pfeil)tasten abzufragen, und bin dabei auf das Interface KeyListener mit der Methode KeyPressed als wohl einzige Lösung (mit Alternative abstract class KeyAdapter, welche im Grunde aber dasselbe ist) gestoßen.

Das funktioniert auch alles soweit, aber es gibt ein Problem:
Wenn man die Taste gedrückt hält, dann wird das KeyEvent für KeyPressed zunächst nur einmal erzeugt, gefolgt von einer kurzen Pause, danach geht es dann zügig ohne Unterbrechung. Also dasselbe Verhalten, wie es bei normalen Texttastatureingaben gewünscht ist.

Kann man dieses Verhalten ändern ? Z.B. für Rotationen von Objekten, etc. ist das absolut lästig.
Ich hätte gerne, dass sobald die Taste gedrückt ist, die Ereignisse ununterbrochen losgefeuert werden.
Gibt es dafür eine andere Methode - die ggf. näher mit dem Tastaturpuffer zusammenarbeitet ?

Eine umständliche Alternative wäre wohl, mit KeyPressed und KeyReleased lediglich ein 'globales Flag' auf An/Aus zu setzen, und in einer Art Hauptschleife in Abhängigkeit davon die gewünscht Aktion ausführen. Dann aber wäre das gesamte Programm nicht mehr rein Event-orientiert (so, wie ich es mir wünsche), sondern bräuchte eine Hauptschleife.
 

Wildcard

Top Contributor
Du könntest auch einen eigenen Thread erzeugen, der gestartet wird wenn eine Taste gedrückt wird,
und beendet wird wenn sie wieder losgelassen wird.
(Hab ich immer so gemacht)
Die Anschlagverögerung auszuschalten ist glaub ich nicht so ohne weiteres möglich.
Bin mir da aber nicht ganz sicher, also wenn es jemand besser weiß...
 

0xdeadbeef

Top Contributor
Ist ein Problem der JVM-Implementierung unter Linux:

Unter Win32 erzeugt eine gedrückte Taste "key pressed"-Nachrichten, solange die Taste gedrückt wird und eine (!) "key released"-Nachricht, wenn die Taste schließlich losgelassen wird. Unter Linux werden die ganze Zeit "key pressed/key released"-Paare erzeugt.

Dadurch ist es nicht möglich, einen für Spiele geeigneten Tastaturhandler zu schreiben, bei dem ja der Zustand der Taste interessiert.

Einzige Möglichkeit: ausschalten der Tastenwiederholung auf (JVM-)globaler Ebene. Das wird z.B. in der LWJGL so gehandhabt, ist vermutlich aber nativ implementiert.
 

kopfsalat

Bekanntes Mitglied
@3735928559
Unter Win32 erzeugt eine gedrückte Taste "key pressed"-Nachrichten, solange die Taste gedrückt wird
Das wäre ja schon die Lösung, wenn es da nicht eine kurze Pause nach dem ersten erzeugten Event zu Beginn gäbe. Habe mir gerade mal LWJGL angesehen, sieht gut aus! Gibt es allerdings derzeit 'nur' für Win/Linux/Mac. Ist aber halt nicht mehr ganz so plattformunabhängig.
Wundert mich generell, dass das so ein Problem zu sein scheint, allerdings meine ich mich auch zu entsinnen, dass z.B. der direkte Tastaturzugriff bei Windows sogar DirectX benutzt.

@Wildcard
Ach jau! Threads sollten ja unter Java keine großen Sorgen bereiten. Werde ich wohl erstmal damit ausprobieren. Klingt immerhin 'more OOP', als eine Hauptschleife.
 

0xdeadbeef

Top Contributor
kopfsalat hat gesagt.:
@3735928559
Unter Win32 erzeugt eine gedrückte Taste "key pressed"-Nachrichten, solange die Taste gedrückt wird
Das wäre ja schon die Lösung, wenn es da nicht eine kurze Pause nach dem ersten erzeugten Event zu Beginn gäbe.
Das ist die Lösung, weil Du die Tastaturwiederholung ja gar nicht brauchts in einem Spiel. Bei ersten KeyPressed kannst Du Dir Deinen Handler einhängen, mit dem Du die Taste als gedrückt merkst, erst beim KeyReleased-Event gibst Du sie wieder frei: solange die Taste als gedrückt markiert iwst, machst Du Deine Aktion
Nur wie gesagt: unter Linux mußt Du dazu die Tastaturwiederholung ausschalten, denn sonst bekommst Du die ganze Zeit wieder Presser/Released-Paare und damit Änderungen des Tasten-Status, was insbesondere wieder die Verzögerung am Anfang verursacht. Unter Win32 dagegen nicht!
 

kopfsalat

Bekanntes Mitglied
:idea:
Jetzt klingelt's. Ich hatte die Problematik bei Linux gar nicht erkannt.

Tsja, dann werde ich mich wohl verabschieden von der Programmierung, wo man für jede Aktion ein eigenes KeyEvent nahm dahingehend, dass man nur noch einmal an und nachher wieder abschalten muss.
Hoffentlich wird dabei kein KeyReleased-Event verschluckt...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G KeyListener für JTextField Allgemeine Java-Themen 5
VfL_Freak KeyEvent.VK_TAB im KeyListener abfragen Allgemeine Java-Themen 13
N Keylistener ohne Dazugehörige Gui Allgemeine Java-Themen 6
R Java KeyListener buggt? Allgemeine Java-Themen 1
C KeyListener Frage Allgemeine Java-Themen 3
T KeyListener Allgemeine Java-Themen 1
S KeyListener ohne Focus - Wie? Allgemeine Java-Themen 2
E KeyListener ohne GUI Allgemeine Java-Themen 6
C KeyListener auslagern - Wie? Allgemeine Java-Themen 3
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
B Keylistener geht nicht Allgemeine Java-Themen 9
A keylistener funktionirt nicht Allgemeine Java-Themen 4
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
M KeyListener Allgemeine Java-Themen 8
S C++/C KeyListener zusammen mit Java Programm Allgemeine Java-Themen 4
T KeyListener lässt sich nur einmal drücken Allgemeine Java-Themen 2
B MouseListener und KeyListener Allgemeine Java-Themen 15
C Sudoku und KeyListener Allgemeine Java-Themen 2
O Frage zum KEyListener Allgemeine Java-Themen 3
J keylistener auf jtable Allgemeine Java-Themen 19
ARadauer mit keylistener hören auch wenn frame nicht den focus hat Allgemeine Java-Themen 2
U Frage zum KeyListener Allgemeine Java-Themen 7
B KeyListener auf mehrere TextFields anwenden Allgemeine Java-Themen 5
G KeyListener: Wiederholtes Aufrufen von KeyPressed verhindern Allgemeine Java-Themen 3
M Tab und KeyListener in einer JTextArea Allgemeine Java-Themen 7
D Allgemeiner KeyListener Allgemeine Java-Themen 4
G KeyListener auf ALT + S Allgemeine Java-Themen 5
S KeyListener! Image Problem! Allgemeine Java-Themen 2
7 Keylistener Allgemeine Java-Themen 3
TheJavaKid Focus für KeyListener setzen Allgemeine Java-Themen 5
M Keylistener für sondertasten an Tastaturen? Allgemeine Java-Themen 6
S Keylistener funktioniert nicht(setFocusable) Allgemeine Java-Themen 4
R Global KeyListener/MouseListener Allgemeine Java-Themen 4
T Unterschiede beim KeyListener zwischen NT und XP Allgemeine Java-Themen 6
R KeyListener ohne Frame und Applet Allgemeine Java-Themen 7
F KeyListener für JTextField Allgemeine Java-Themen 4
S KeyListener ohne awt Allgemeine Java-Themen 2
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
W Alternative für Threads Allgemeine Java-Themen 6
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
M DAOs veraltet - was ist die Alternative? Allgemeine Java-Themen 13
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
C Alternative zu NetworkX in Java Allgemeine Java-Themen 1
M Alternative zur Serialisierung.. Protobuf? Allgemeine Java-Themen 9
B Alternative zu nebenläufigen Prozessen Allgemeine Java-Themen 4
BonoBoo Alternative zum endlosen Instanzieren Allgemeine Java-Themen 2
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
E Gewollte Endlosschleife unterbrechen oder Alternative gesucht Allgemeine Java-Themen 2
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
F alternative zu "JPEGImageDecoderImpl" Allgemeine Java-Themen 2
T Timer oder Alternative? Allgemeine Java-Themen 3
G Alternative zu .properties Dateien Allgemeine Java-Themen 20
S Alternative zu SortedMap? Allgemeine Java-Themen 8
H Alternative zu Stack Allgemeine Java-Themen 3
pikay Jar2Exe Alternative? Allgemeine Java-Themen 17
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
H Alternative if Schreibweise mit ? Allgemeine Java-Themen 10
G suche Property alternative Allgemeine Java-Themen 4
H Wie schön oder unschön ist dieser code - alternative ? Allgemeine Java-Themen 5
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
G libext Alternative? Allgemeine Java-Themen 5
S Alternative zu Robot (wegen Umlauten) Allgemeine Java-Themen 13
foobar Alternative zu JavaHelp gesucht Allgemeine Java-Themen 2
I Alternative zu getClass().getResourceAsStream() ? Allgemeine Java-Themen 9
D System.setProperty alternative Allgemeine Java-Themen 4
J alternative zu rsh ? Allgemeine Java-Themen 5
G Alternative zu split() Allgemeine Java-Themen 3
K Alternative zu JNI Allgemeine Java-Themen 3
P Alternative zu replaceAll (jdk < 1.4) Allgemeine Java-Themen 14
M Alternative zu Thread : stop() ? Allgemeine Java-Themen 10
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
T Datum OHNE Uhrzeit Zeitzonen-übergreifend Allgemeine Java-Themen 4
N mit sysout, ohne sysout Allgemeine Java-Themen 17
O Programmierprüfung auf moodle ohne Hilfsmittel... Allgemeine Java-Themen 23
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
M Switches ohne String Allgemeine Java-Themen 18
A Java JDK ohne Oracle Konto Allgemeine Java-Themen 5
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
A Java ListNode Element einfügen ohne Bibliothek Allgemeine Java-Themen 6
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
Kirby.exe Keyboard Input ohne Enter Allgemeine Java-Themen 43
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S Potenzieren mit rationalen Potenzen ohne Math.pow Allgemeine Java-Themen 16
F Timestamp in Oracle ohne Formatierung reinbekommen Allgemeine Java-Themen 7
M Drucken ohne Dialog Allgemeine Java-Themen 1
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben