Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    25

    Problema visibilità KeyListener

    ciao ragazzi sto realizzando un pinball.
    il gioco è costituito da un frame con un pannello dove inizialmente è presente uno sfondo e 9 bottoni x la scelta dello sfondo del pinball. nell'eseguire il gioco(ancora senza animazione) mi sono accorto che prima di cliccare il bottone(e quindi prima di richiamare il pannello e cambiare sfondo ed inserire tutti i miei oggetti in esso) se clicco una qualsiasi freccia(saranno i controller del gioco) mi viene stampato come richiesto che ho cliccato un pulsante ma la cosa non accade dopo la scelta dello sfondo...qualcuno potrebbe spiegarmi perchè il mio keylistener opportunamente implementato nel jframe viene visto dal jframe prima della scelta dello sfondo dopodicchè niente più??


    questo è il mio keylistenter:
    codice:
    public class GestoreTastiera implements KeyListener{
         public void keyPressed(KeyEvent e){
             switch (e.getKeyCode()){
                 case KeyEvent.VK_DOWN:System.out.println("sono su keypressed down");break;
                 case KeyEvent.VK_UP:System.out.println("sono su keypressed up");break;
                 case KeyEvent.VK_LEFT:System.out.println("sono su keypressed left");break;
                 case KeyEvent.VK_RIGHT:System.out.println("sono su keypressed right");break;
             }
         }
         public void keyReleased(KeyEvent e) {
             switch (e.getKeyCode()) {
                 case KeyEvent.VK_DOWN:System.out.println("sono su keyreleased down");break;
                 case KeyEvent.VK_UP:System.out.println("sono su keyreleased up");break;
                 case KeyEvent.VK_LEFT:System.out.println("sono su keyreleased left");break;
                 case KeyEvent.VK_RIGHT:System.out.println("sono su keyreleased right");break;
             }
         }
         public void keyTyped(KeyEvent e) {
             switch (e.getKeyCode()) {
                 case KeyEvent.VK_DOWN:System.out.println("sono su keytyped down");break;
                 case KeyEvent.VK_UP:System.out.println("sono su keytyped up");break;
                 case KeyEvent.VK_LEFT:System.out.println("sono su keytyped left");break;
                 case KeyEvent.VK_RIGHT:System.out.println("sono su keytyped right");break;
             }
         }
     }
    nel jframe è ovviamente presente:
    codice:
    addKeyListener(new GestoreTastiera());
    ringrazio anticipatamente chiunque possa darmi una mano a risolvere questo problema!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema visibilità KeyListener

    Originariamente inviato da vale69
    qualcuno potrebbe spiegarmi perchè il mio keylistener opportunamente implementato nel jframe viene visto dal jframe prima della scelta dello sfondo dopodicchè niente più??
    Beh, dipende da quale è il componente che ha il "focus".

    Comunque se il pannello di cui parli è quello in cui farai tutto il disegno del gioco (insomma, è solo quello e non più componenti) allora rendilo "focusable" ( setFocusable(true) ) e registra il KeyListener su questo pannello.
    Chiaramente bisognerà dare il "focus" al pannello ... ovvio. E nota che cliccandoci sopra, non lo fa da solo, dovresti registrare un MouseListener e al mousePressed dare il focus al pannello.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    25
    Ho capito tutto quanto tranne la questione del MouseListener. Perchè dovrei avere bisogno di un ascoltatore del mouse quando nel pinball l'unica cosa che devo usare è la tastiera???

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    25
    Vabbè non ho ben capito cosa volessi dire riguardo al MouseListener, quel che è importante è che sono riuscito a risolvere il problema...Grazie mille per il focus

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da vale69
    Ho capito tutto quanto tranne la questione del MouseListener. Perchè dovrei avere bisogno di un ascoltatore del mouse quando nel pinball l'unica cosa che devo usare è la tastiera???
    La questione è semplice: facendo setFocusable(true) il pannello può ricevere il focus (nota il "può").
    Il fatto che in un certo momento riceva effettivamente il focus è perché l'utente ha fatto qualcosa per darglielo. Il caso più semplice (che è già gestito in automatico) è usare il tasto TAB. In ciclo puoi dare il focus ai vari componenti, quindi prima o poi ci arrivi al pannello.

    Se vuoi dare il focus al pannello cliccandoci sopra, questo non è gestito "di serie" (principalmente perché di serie i pannelli non sono focusable). Se vuoi dare il focus con il mouse devi appunto registrare esplicitamente un MouseListener e nel mousePressed fare un requestFocusInWindow() sul pannello.

    Tutto qui. Magari non ti serve ma almeno adesso lo sai.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    25
    ah ok ho finalmente capito...grazie di tutto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.