Keller-Dev
Docs
· Java & Hytale
Übersicht
Neuer Eintrag
Eintrag bearbeiten
Titel *
Kategorie *
Java Core
Java OOP
Java Advanced
Plugin-System
Event-System
UI-System
Sonstiges
Erklärung / Inhalt *
Ein klassischer KeyListener verliert die Tasteneingaben, sobald das Panel den Fokus verliert. Key Bindings über JComponent.WHEN_IN_FOCUSED_WINDOW reagieren verlässlich, solange das Fenster fokussiert ist. Thread-Sicherheit: Da Key Bindings auf dem EDT laufen, der Game-Loop-Thread die Eingaben aber ausliest, muss ein thread-sicheres Set verwendet werden: ConcurrentHashMap.newKeySet() statt eines normalen HashSet.
Code-Beispiel (optional)
// Thread-sichere Tastenerfassung private final Set<Integer> pressedKeys = ConcurrentHashMap.newKeySet(); public void registerKey(JComponent component, int keyCode, String name) { InputMap inputMap = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = component.getActionMap(); inputMap.put(KeyStroke.getKeyStroke(keyCode, 0, false), name + "_pressed"); inputMap.put(KeyStroke.getKeyStroke(keyCode, 0, true), name + "_released"); actionMap.put(name + "_pressed", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { pressedKeys.add(keyCode); } }); actionMap.put(name + "_released", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { pressedKeys.remove(keyCode); } }); }
Referenz-Datei / Projekt (optional)
Referenz-Klasse / Interface (optional)
Quellen-Link (optional)
Tags (durch Komma getrennt)
Änderungen speichern
Abbrechen