JPanel e KeyListener in Java Swing

di il
1 risposte

JPanel e KeyListener in Java Swing

Buonasera, ho bisogno di un piccolo aiuto.
Per un progetto sto creando un video gioco, Snake, però con interfaccia utente.
Riassumendo il progetto, è composto da:
un JPanel iniziale che raffigura il menù del gioco, premendo il JButton start si va in un altro JPanel dove bisogna scegliere un personaggio e subito dopo la scelta si entra in un altro JPanel che contiene l'intero loop del gioco.
Il loop del gioco l'ho fatto inizialmente, a parte, e funziona perfettamente ma, quando lo integro con il resto del progetto, il controllo dei tasti non funziona, quindo non ho il controllo dello snake e non riesco a muoverlo a mio piacimento, e non riesco a capire il problema.
Qualcuno ha qualche idea/suggerimento?
Grazie mille.

1 Risposte

  • Re: JPanel e KeyListener in Java Swing

    phi ha scritto:


    non ho il controllo dello snake e non riesco a muoverlo a mio piacimento, e non riesco a capire il problema.
    JPanel è un componente che normalmente non può ricevere il "focus", viene usato tipicamente solo come contenitore di altri componenti o in certi casi per fare dei disegni. Quindi questo è il motivo per cui per default non può avere il focus.

    In casi specifici come quello che hai descritto, questa capacità di poter ricevere il focus va attivata esplicitamente: setFocusable(true) sul JPanel. Allora un KeyListener sul JPanel "funziona".

    Ma attenzione: se il tuo pannello è l'unico componente della tua interfaccia, allora quando avvii l'applicazione, avrà sicuramente già il focus.
    Se hai altri componenti, pulsanti, textfield ecc... il focus inizialmente potrebbe essere su uno di questi.
    Se vuoi che cliccando sul JPanel riceva il focus, questo non è gestito di serie, bisogna registrare un MouseListener che al mousePressed dia il focus.
Devi accedere o registrarti per scrivere nel forum
1 risposte