Foro de elhacker.net

Programación => Java => Mensaje iniciado por: smasher666 en 2 Octubre 2009, 15:13 pm



Título: Problema KeyListener java Linuix-->Windows
Publicado por: smasher666 en 2 Octubre 2009, 15:13 pm
Hola, tengo un problema programando el java, el problema es que tengo un frame con un keylistener que en principio funciona, lo bueno viene que cuando lo paso a linux el keylistener no funciona, todo el demas codigo si pero el keylistener no. tambien me he dado cuenta de que en windows es KeyListener(KeyEvent e) y en linux KeyListener(KeyEvent arg0)

... alguien me puede ayudar?

pd: luego cuelgo el codigo que estoy en la uni.


Título: Re: Problema KeyListener java Linuix-->Windows
Publicado por: egyware en 2 Octubre 2009, 15:40 pm
Deberia funcionar igual.

Una pregunta para ti

KeyListener(KeyEvent e)
KeyListener(KeyEvent arg0)

¿Existe una diferencia grande?
R:No, las funciones son iguales lo unico que cambia es el nombre de la variable.

Perfectamente puedo colocar
KeyListener(KeyEvent aadsadadsjakjrorsajfasjfadjasa)
lo unico malo de usar esa variable
aadsadadsjakjrorsajfasjfadjasa.getSource() :P

Sobre que no funciona en linux mmm hiciste addKeyListener al frame correspondiente?


Título: Re: Problema KeyListener java Linuix-->Windows
Publicado por: smasher666 en 2 Octubre 2009, 15:50 pm
ya se que solo cambia el nombre de la variable, pero es lo unico que se me ocurria XDD

tengo un frame con un canvas dentro, tal vez sea porque le he agregado el keylistener al frame i no al canvas... puede ser? porque en windows funciona pero si clicko dentro de la ventana deja de funcionar :S

gracias por la rapidez amigo ;)

pd: si que hice addKeyListener


Título: Re: Problema KeyListener java Linuix-->Windows
Publicado por: -Ramc- en 2 Octubre 2009, 17:57 pm
Dejanos ver tú código o parte de el, porque es raro que te funcione en un sistema operativo y en otro no.

¿En los dos  utilizas la JRE de sun?


Título: Re: Problema KeyListener java Linuix-->Windows
Publicado por: smasher666 en 5 Octubre 2009, 18:07 pm
perdonen por tardar, ya resolvi el problema, tenia la parte que crea al keyListener comentado...


pero sigo teniendo otro problema, cuando lo ejecuto, a veces va i a veces no va, es decir, lo ejecuto i sin modificar nada, a la tercera funciona y cuando funciona, si cliko encima de la ventana deja de ir el KeyListener, alguien me ayuda?

os dejo la parte del codigo donde creo y añado el keyListener:

Código:
package marcianos;

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;

/**
 *
 * @author srgank
 */
public class Juego {

    private int ANCHO = 800;
    private int ALTO = 600;
    private JFrame ventana;
    private Player player;

    public Juego() {

        ventana = new JFrame();


        ventana.setBounds(0, 0, ALTO, ANCHO);
        ventana.setVisible(true);
        ventana.setDefaultLookAndFeelDecorated(true);


        player = new Player(ventana);

        Grafico grafico = new Grafico(player);

        ventana.add(grafico);


        añadirKeyListener(ventana);






        grafico.run();


    }

    public void añadirKeyListener(JFrame frame) {



        KeyListener key3 = new KeyListener() {

            public void keyTyped(KeyEvent arg0) {
                if (arg0.getKeyCode() == arg0.VK_LEFT) {
                    player.setDireccion("izquierda");

                } else if (arg0.getKeyCode() == arg0.VK_RIGHT) {
                    player.setDireccion("derecha");
                }
                if (arg0.getKeyCode() == arg0.VK_SPACE) {
                    player.setDisparo(true);

                    System.out.println("Space");

                }
            }

            public void keyPressed(KeyEvent arg0) {
                if (arg0.getKeyCode() == arg0.VK_LEFT) {
                    player.setDireccion("izquierda");

                } else if (arg0.getKeyCode() == arg0.VK_RIGHT) {
                    player.setDireccion("derecha");
                }

                if (arg0.getKeyCode() == arg0.VK_SPACE) {
                    player.setDisparo(true);
                }
            }

            public void keyReleased(KeyEvent arg0) {
                player.setDireccion("nulo");

                if (arg0.getKeyCode() == arg0.VK_SPACE) {
                    player.setDisparo(true);

                    System.out.println("Space");

                }


            }
        };





        frame.addKeyListener(key3);


    }

    class Grafico extends Canvas implements Runnable {

        private int ANCHO = 800;
        private int ALTO = 600;
        private Player player;

        public Grafico(Player player) {

            setBounds(0, 0, ALTO, ANCHO);
            setVisible(true);
            this.player = player;






    }

        @Override
    public void paint(Graphics g){
     
    player.mostrarPlayer(g);
    player.disparar(g);
   


   
    }

    public void run() {
        while(true){
       
            repaint();
            try {
                Thread.sleep(25);
            } catch (InterruptedException ex) {
                Logger.getLogger(Grafico.class.getName()).log(Level.SEVERE, null, ex);
            }

        }




    }


}
}