2011-09-24 12 views
7

Bir metin kutusuna yazıp bir tuşa bastığınızda, ilk tuşa basma gecikmesine bağlı olarak (a ...... aaaaaaaaaaaaaaa) alırsınız.İlk tuşa basmayı geciktirme

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

Kullanıcıların reflekslerinin çok önemli olduğu bir oyun yapıyorum. Bu gecikmeyi tamamen nasıl ortadan kaldırabilirim? Yukarıdaki kod çalışmıyor. Ayrıca, hiçbir işlem yapmadan processKeyEvent'i geçersiz kılmayı denedim.

cevap

2

Bu olaylar JVM/işletim sistemi tarafından oluşturulur ve sizden anahtar geciktirme/anahtar tekrarlama ayarlarını değiştirmesini istemediğiniz sürece korkarım ki daha fazla iş yapmanız gerekecektir.

Olayları doğru hızda tetikleyen bir Zamanlayıcı oluşturmanızı öneririm, keyPressed/keyReleased üzerinden zamanlayıcıyı başlatır ve durdurur.

+0

Daha kolay bir yolu var mı? – David

+0

@David: Öyle düşünmeyin - Aioobe'nin doğru olduğunu düşünüyorum, çünkü tüm işletim sistemi temelli olduğundan çok fazla bir çözüm yok. – Nightfirecat

+1

Bu yaklaşımın yalnızca Windows'da birden çok tuşa basılı olay oluşturduğundan (anahtar basılı tutulduktan) ve yalnızca tek bir anahtarDeğiştirilmiş olaydan (anahtar serbest bırakıldığında) çalıştığından emin olun. Ancak, diğer işletim sisteminin bir Zamanlayıcı kullanma amacını ortadan kaldıran tekrarlama oranı sıklığında bir tuşa basılmış/tuşlanmış bir çift olay üreteceğine inanıyorum. Bu problem için iyi bir platform bağımsız çözüm görmedim. – camickr