2011-09-24 9 views
7

Quando si digita in una casella di testo e si tiene premuto un tasto, si ottiene (a ....... aaaaaaaaaaaaaaa), a seconda del ritardo della pressione del tasto iniziale.Eliminazione del ritardo iniziale della pressione dei tasti

addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent e) { 
     // Handle key press here 
    } 

Sto creando un gioco in cui i riflessi dell'utente sono molto importanti. Come posso eliminare completamente questo ritardo? Il codice sopra non funziona. Ho anche provato a sovrascrivere processKeyEvent senza fortuna.

risposta

2

Questi eventi sono generati dalla JVM/sistema operativo e, a meno che non si imponga all'utente di modificare le impostazioni di ritardo tasto/ripetizione tasti, temo che si dovrà fare ancora un po 'di lavoro.

Ti suggerisco di creare un timer che attivi gli eventi nella frequenza corretta, avviare e arrestare il timer su keyPressed/keyReleased.

+0

C'è un modo più semplice? – David

+0

@David: Non pensarlo, penso che aioobe abbia ragione, in quanto non c'è una soluzione alternativa, dato che è basata su tutto il sistema operativo. – Nightfirecat

+1

Tieni presente che questo approccio funziona solo su Windows poiché genera più eventi keyPressed (tenendo premuto il tasto) e solo una singola chiaveEsposizione rilasciata (quando viene rilasciata la chiave). Tuttavia, credo che altri sistemi operativi genereranno un tasto premuto/tasto Una coppia di eventi rilasciati alla frequenza di ripetizione che vanifica lo scopo di utilizzare un timer. Non ho visto una buona soluzione indipendente dalla piattaforma per questo problema. – camickr

Problemi correlati