Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Problema KeyListener
Forum - Java - Problema KeyListener

Avatar
sarbaturino (Normal User)
Pro


Messaggi: 66
Iscritto: 25/04/2011

Segnala al moderatore
Postato alle 18:57
Martedì, 01/05/2012
Salve..

Ho riscontrato dei problemi nel far funzionare la tastiera..
Praticamente, quando carico le immagini nel mio sorgente, il KeyListener non mi acquisisce i tasti che i premo..

Mentre quando le immagini non sono caricate, il KeyListener acquisisce tranquillamente i tasti premuti in input..

Mi potete aiutare a risolvere questo problema??

Il mio sorgente è questo:
Codice sorgente - presumibilmente Java

  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Image;
  4. import java.awt.MediaTracker;
  5. import java.awt.Toolkit;
  6. import java.awt.event.KeyEvent;
  7. import java.awt.event.KeyListener;
  8. import java.awt.event.MouseEvent;
  9. import java.awt.event.MouseListener;
  10.  
  11. import javax.swing.JPanel;
  12.  
  13.  
  14. public class MyPanel extends JPanel implements KeyListener,MouseListener {
  15.        
  16.         private Image sfondoPannello;
  17.         private Image tavoletta;
  18.         private Image stella;
  19.        
  20.         public MyPanel (){
  21.                 super();
  22.                 setBackground(Color.BLACK);
  23.                 this.addKeyListener(this); //Aggiunta della tastiera;
  24.                 this.addMouseListener(this); //Aggiunta del mouse;
  25.                
  26.                 this.setFocusable(true);
  27.                
  28.                 sfondoPannello = Toolkit.getDefaultToolkit().getImage("Image/sfondo.png");
  29.                 tavoletta = Toolkit.getDefaultToolkit().getImage("Image/astronave.png");
  30.                 stella = Toolkit.getDefaultToolkit().getImage("Image/star.png");
  31.                  
  32.                 //caricaImmagine ( sfondoPannello );
  33.                 //caricaImmagine ( tavoletta );
  34.                 //caricaImmagine ( stella );
  35.                
  36.         }
  37.  
  38.         private void caricaImmagine ( Image img){
  39.                 try{
  40.  
  41.                         MediaTracker track = new MediaTracker(this);
  42.                         track.addImage(img, 0); //load dell'immagine
  43.                         track.waitForID(0); //attesa del caricamento;
  44.                 }
  45.                 catch(InterruptedException e){
  46.                         e.printStackTrace(); //Stampa l'errore;
  47.                         System.out.println("Immagine non trovata");
  48.                 }
  49.         }
  50.  
  51.         /*
  52.          * descrive come deve essere disegnato il pannello;
  53.          */
  54.         public void  paintComponent ( Graphics g){
  55.                 super.paintComponent(g);
  56.                 //g.drawImage(sfondoPannello,0, 0, null);
  57.                 //g.drawImage(tavoletta,10,10, null);
  58.                        
  59.                 //g.drawImage(stella,0, 0, null);
  60.         }
  61.  
  62.         @Override
  63.         public void keyPressed(KeyEvent e) {
  64.                 switch (e.getKeyCode()) {
  65.                 case KeyEvent.VK_UP : System.out.println("UP"); ;break;
  66.                 case KeyEvent.VK_DOWN :System.out.println("DX");;break;
  67.                 case KeyEvent.VK_LEFT: System.out.println("SX");;break;
  68.                 case KeyEvent.VK_RIGHT:System.out.println("D");;break;                         
  69.                 default:break;
  70.                 }
  71.                 //this.repaint();
  72.         }
  73.        
  74.         @Override
  75.         public void keyReleased(KeyEvent e) {
  76.                 //this.repaint();
  77.         }
  78.  
  79.         @Override
  80.         public void keyTyped(KeyEvent e) {
  81.                
  82.                 //this.repaint();      
  83.         }
  84.  
  85.         @Override
  86.         public void mouseClicked(MouseEvent e) {
  87.                 System.out.print("MyPanel.mouseClicked() ");
  88.                 System.out.println(e.getX()+", "+e.getY());
  89.                 this.repaint();
  90.         }
  91.  
  92.         @Override
  93.         public void mouseEntered(MouseEvent e) {
  94.                 System.out.println("MyPanel.mouseEntered()");
  95.         }
  96.  
  97.         @Override
  98.         public void mouseExited(MouseEvent e) {
  99.                 System.out.println("MyPanel.mouseExited()");
  100.         }
  101.  
  102.         @Override
  103.         public void mousePressed(MouseEvent e) {
  104.                 System.out.print("MyPanel.mousePressed()");
  105.                 System.out.println(e.getX()+", "+e.getY());
  106.         }
  107.  
  108.         @Override
  109.         public void mouseReleased(MouseEvent e) {
  110.                
  111.                 System.out.println("MyPanel.mouseReleased()");
  112.         }      
  113. }



Vi ringrazio in anticipo per il vostro aiuto!!
Grazie!!

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 9:34
Mercoledì, 02/05/2012
dopo le chiamate a caricaImmagine() scrivi questa istruzione:

Codice sorgente - presumibilmente Plain Text

  1. requestFocusInWindow();



Non so spiegarti il motivo per qui il KeyListener si disabilita dopo certi eventi/istruzioni perchè ho riscontrato lo stesso problema però in un'altra circostanza.

PM Quote
Avatar
sarbaturino (Normal User)
Pro


Messaggi: 66
Iscritto: 25/04/2011

Segnala al moderatore
Postato alle 19:15
Sabato, 05/05/2012
Grazie mille per la tua gentile risposta..

Sono riuscito a risolverlo..
Praticamente avevo inserito due volte la funzione "frame.setVisible( true)",
sia nel main e sia nella classe MyFrame..
Quindi generava quel problema..

Grazie ancora!!

PM Quote