Oppure

Loading
01/05/12 16:57
sarbaturino
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:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPanel;


public class MyPanel extends JPanel implements KeyListener,MouseListener {
	
	private Image sfondoPannello;
	private Image tavoletta;
	private Image stella;
	
	public MyPanel (){
		super();
		setBackground(Color.BLACK);
		this.addKeyListener(this); //Aggiunta della tastiera;
		this.addMouseListener(this); //Aggiunta del mouse;
		
		this.setFocusable(true); 
		
		sfondoPannello = Toolkit.getDefaultToolkit().getImage("Image/sfondo.png");
		tavoletta = Toolkit.getDefaultToolkit().getImage("Image/astronave.png");
		stella = Toolkit.getDefaultToolkit().getImage("Image/star.png");
		 
		//caricaImmagine ( sfondoPannello );
		//caricaImmagine ( tavoletta );
		//caricaImmagine ( stella );
		
	}

	private void caricaImmagine ( Image img){
		try{

			MediaTracker track = new MediaTracker(this);
			track.addImage(img, 0); //load dell'immagine
			track.waitForID(0); //attesa del caricamento;
		}
		catch(InterruptedException e){
			e.printStackTrace(); //Stampa l'errore;
			System.out.println("Immagine non trovata");
		}
	}

	/*
	 * descrive come deve essere disegnato il pannello;
	 */
	public void  paintComponent ( Graphics g){
		super.paintComponent(g);
		//g.drawImage(sfondoPannello,0, 0, null);
		//g.drawImage(tavoletta,10,10, null);
			
		//g.drawImage(stella,0, 0, null);
	}

	@Override
	public void keyPressed(KeyEvent e) {
		switch (e.getKeyCode()) {
		case KeyEvent.VK_UP : System.out.println("UP"); ;break;
		case KeyEvent.VK_DOWN :System.out.println("DX");;break;
		case KeyEvent.VK_LEFT: System.out.println("SX");;break;
		case KeyEvent.VK_RIGHT:System.out.println("D");;break;				
		default:break;
		}
		//this.repaint();
	}
	
	@Override
	public void keyReleased(KeyEvent e) {
		//this.repaint();
	}

	@Override
	public void keyTyped(KeyEvent e) {
		
		//this.repaint();	
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		System.out.print("MyPanel.mouseClicked() ");
		System.out.println(e.getX()+", "+e.getY());
		this.repaint();
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		System.out.println("MyPanel.mouseEntered()");
	}

	@Override
	public void mouseExited(MouseEvent e) {
		System.out.println("MyPanel.mouseExited()");
	}

	@Override
	public void mousePressed(MouseEvent e) {
		System.out.print("MyPanel.mousePressed()");
		System.out.println(e.getX()+", "+e.getY());
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		
		System.out.println("MyPanel.mouseReleased()");
	}	
}


Vi ringrazio in anticipo per il vostro aiuto!!
Grazie!!
aaa
02/05/12 7:34
Bonny
dopo le chiamate a caricaImmagine() scrivi questa istruzione:

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.
aaa
05/05/12 17:15
sarbaturino
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!!
aaa