Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    15

    Keylistener funziona solo dopo la pressione di un pulsante del mouse..

    salve a tutti, come da titolo ho questo problema.. implementando il KeyListener e il MouseListener aggiungendoli al frame e inserendo tutti i metodi, non capisco perchè funzionino entrambi, ma il KeyListener mi dice che è stato premuto un pulsante solo dopo che ho cliccato con il mouse sul frame..

    senza problemi vi posto il codice:

    codice:
    import java.awt.Canvas;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    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 java.io.IOException;
    //import javax.media.CannotRealizeException;
    //import javax.media.NoPlayerException;
    import javax.swing.JFrame;
    
    public class ChooseCharacter extends Canvas implements KeyListener, MouseListener
    {
        JFrame f;
        Image sfondo, p0, p1, p2, p3;
        int i;
        ServerConnection s;
    
        public ChooseCharacter()
        {
        }
    
        public ChooseCharacter(JFrame frame) throws IOException/*, NoPlayerException, CannotRealizeException*/
        {
            f = frame;
            this.addMouseListener(this);
            this.addKeyListener(this);
            sfondo = Toolkit.getDefaultToolkit().getImage("sfondo.jpg");
            sfondo = sfondo.getScaledInstance(f.getWidth(), f.getHeight(), Image.SCALE_DEFAULT);
            p0 = Toolkit.getDefaultToolkit().getImage("personaggio1.jpg");
            p1 = Toolkit.getDefaultToolkit().getImage("personaggio2.jpg");
            p2 = Toolkit.getDefaultToolkit().getImage("personaggio3.jpg");
            p3 = Toolkit.getDefaultToolkit().getImage("personaggio4.jpg");
            //Main.s = new Sound("SuonoSceltaPersonaggio.mp3");
            i = 0;
           // s = new ServerConnection();
           // s.attendi();
        }
    
        @Override
        public void paint(Graphics g)
        {
            g = (Graphics2D) g;
            g.drawImage(sfondo, -5, -35, this);
    
            if (i == 0)
                g.drawImage(p0, -5, -35, this);
            else
                if (i == 1)
                    g.drawImage(p1, -5, -35, this);
                else
                    if (i == 2)
                        g.drawImage(p2, -5, -35, this);
                    else
                        if (i == 3)
                            g.drawImage(p3, -5, -35, this);
    
        }
    
        public void mouseClicked(MouseEvent e)
        {
            System.out.print("sono nel mouseclicked");
            //Se clicco nel pulsante di scelta personaggio
           /* if (e.getX()>0 && e.getY()>0)
            {
                try
                {
                    f.removeMouseListener(this);
                    f.remove(this);
                    f.add(new Level1(f, i));
                    f.validate();
                }
                catch (IOException ex) {}
                //catch (NoPlayerException ex) {}
                //catch (CannotRealizeException ex) {}
            }*/
    
            //Pulsante indietro
            if (e.getX()>0 && e.getY()>0)
            {
                if (i == 0)
                    i = 3;
                else
                    i--;
            }
            
            //Pulsante avanti
            if (e.getX()>0 && e.getY()>0)
            {
                if (i == 3)
                    i = 0;
                else
                    i++;
            }
        }
    
        public void mousePressed(MouseEvent e)
        {
        }
    
        public void mouseReleased(MouseEvent e)
        {
        }
    
        public void mouseEntered(MouseEvent e)
        {
        }
    
        public void mouseExited(MouseEvent e)
        {
        }
    
        public void keyTyped(KeyEvent e)
        {
        }
    
        public void keyPressed(KeyEvent e)
        {
            System.out.print("pulsante premuto: "+e.getKeyCode());
            //Se ho premuto il pulsante invio allora prendo quel personaggio
            if (e.getKeyCode() == KeyEvent.VK_ENTER)
            {
                try
                {
                    f.removeMouseListener(this);
                    f.remove(this);
                    f.add(new Level1(f, i));
                    f.validate();
                }
                catch (IOException ex) {}
                //catch (NoPlayerException ex) {}
                //catch (CannotRealizeException ex) {}
            }
    
            //Se premo il pulsante su allora torno indietro con il personaggio
            if (e.getKeyCode() == KeyEvent.VK_UP)
            {
                if (i == 0)
                    i = 3;
                else
                    i--;
            }
    
            //Se premo il pulsante giù allora torno indietro con il personaggio
            if (e.getKeyCode() == KeyEvent.VK_UP)
            {
                if (i == 3)
                    i = 0;
                else
                    i++;
            }
    
            repaint();
        }
    
        public void keyReleased(KeyEvent e)
        {
        }
    }
    ovviamente accetto consigli sulla programmazione generale del codice che ho scritto anche se non è riguardante la domanda che ho fatto.. grazie in anticipo..

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    15
    Aggiungo che scrivendo il seguente codice:

    codice:
    System.out.print("E' displayable: "+this.isDisplayable()+'\n');
    System.out.print("E' attivo: "+this.isEnabled()+'\n');
    System.out.print("E' focusable: "+this.isFocusable()+'\n');
    System.out.print("E' in mostra: "+this.isShowing()+'\n');
    System.out.print("E' visibile: "+this.isVisible()+'\n');
    System.out.print("E' valido: "+this.isValid()+'\n');
    Come output nel init ottengo:

    E' displayable: false
    E' attivo: true
    E' focusable: true
    E' showing: false
    E' visibile: true
    E' valido: false

    mentre premendo un pulsante da tastiera non succede niente, e cliccando sul mouse ottengo come output:

    E' displayable: true
    E' attivo: true
    E' focusable: true
    E' showing: true
    E' visibile: true
    E' valido: true


    non so se vi può essere d'aiuto ma lo aggiungo..

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.