miércoles, 15 de abril de 2009

Principales eventos de ratón

Para obtener información de una acción del ratón sobre un determinado elemento de la ventana, o sobre una ventana, se debe crear un método asociado al evento deseado.

Para crear ese tipo de métodos desde NetBeans se dispone del menú contextual o la ventana de Propiedades de la parte derecha que dispone de una pestaña Eventos.

Al crear uno de estos métodos, automáticamente se define un parámetro que recoge información sobre el evento producido. Ese parámetro recibe el nombre evt si se crea automáticamente con NetBeans. Ese es el nombre que debe utilizarse para llamar a los métodos.

Por ejempo, uno de los métodos puede ser:

private void formMouseMoved(java.awt.event.MouseEvent evt)

Eventos

  • mouseMoved: se ha movido el ratón.
  • mouseClicked: se ha hecho clic con algún botón del ratón.
  • mouseWheelMoved: se ha movido la rueda del ratón.
  • mouseDragged: se ha movido el ratón manteniendo pulsado algún botón.
  • mousePressed: se ha pulsado algún botón.
  • mouseReleased: se ha soltado algún botón.
  • mouseEntered: el puntero del ratón está sobre el elemento en el que está definido el evento.
  • mouseExited: el puntero del ratón ha dejado de estar sobre el elemento en el que está definido el evento.

Métodos

  • evt.getX() y evt.getY() permiten obtener la posición (coordenadas X e Y) en la que se encuentra el puntero del ratón respecto al objeto donde se haya definido el evento.
  • evt.getButton() retorna un valor entero con el número del botón pulsado (1: izquierdo, 2: central o rueda, 3: derecho).
  • evt.getClickCount() retorna el número de clic seguidos que se han realizado.
  • evt.getWheelRotation() retorna 1 cada vez que se mueve la rueda hacia atrás y -1 si se hace hacia delante.

Ejemplo


    private void panel1MouseClicked(java.awt.event.MouseEvent evt)
    {
        System.out.print("Se ha hecho clic en: ");
        System.out.println(evt.getX() + "," + evt.getY());
        System.out.print("Con el botón: ");
        switch(evt.getButton())
        {
            case 1:
                System.out.println("izquierdo");
                break;
            case 2:
                System.out.println("central o la rueda");
                break;
            case 3:
                System.out.println("derecho");
                break;
        }
        System.out.print("Se ha pulsado ");
        System.out.println(evt.getClickCount() + " veces seguidas");
    }                            

martes, 14 de abril de 2009

Movimiento de gráficos mediante teclas en Java

La explicación del movimiento de un gráfico en Java mediante la pulsación de teclas está basada en este caso en un ejemplo similar al utilizado en el artículo "Movimiento de gráficos mediante botones en Java", por lo que debe utilizarse esa otra explicación para conocer los atributos y métodos creados en el panel que se ha utilizado para la bola que se va a mover.

Descarga del ejemplo completo.


En la ventana principal se debe realizar el control de las teclas pulsadas. Para ello se declara el controlador de eventos de pulsaciones del teclado. Una de las formas más sencillas es a través del menú contextual de la ventana: Eventos > Key > KeyPressed. Es importante asegurarse que se hace sobre la ventana y no sobre un componente de ella ya que se asignaría el control del teclado sólo a ese componente.



Este tipo de evento (keyPressed) se repite mientras se mantenga pulsada la tecla. Si se desea un evento que sólo sea llamado con cada pulsación de la tecla se debe usar keyReleased.

Otra forma de asignar código al evento es mediate la ventana Eventos de la parte derecha:


Al asignar un controlador a uno de esos eventos se abre el editor de código donde se deben escribir las sentencias que se ejecutarán al pulsar una tecla.

    private void formKeyPressed(java.awt.event.KeyEvent evt)                                
    {                                    
       switch(evt.getKeyCode())
       {
           case KeyEvent.VK_RIGHT:
               tablero1.moverDerecha();
               break;
           case KeyEvent.VK_LEFT:
               tablero1.moverIzquierda();
               break;
           case KeyEvent.VK_UP:
               tablero1.moverArriba();
               break;
           case KeyEvent.VK_DOWN:
               tablero1.moverAbajo();
               break;
       }
    }      

El parámetro evt que aparece permite distinguir qué tecla se ha pulsado, a través de su método getKeyCode(). Este método retorna un valor entero con el código de la tecla que se ha pulsado. Si se conoce el valor del código de la tecla deseada se puede hacer una comparación directamente con el valor numérico. Es más cómodo utilizar las contantes que ya están declaradas para los códigos de teclas (KeyEvent.VK_nombreTecla). Para conocer los nombres de teclas que existen, en NetBeans se tiene la ventaja de que al escribir KeyEvent seguido del punto aparecen todas las constantes y métodos que tiene definidas.

En este ejempo se ha utilizado la sentencia switch para realizar las comparaciones, pero es posible hacer cualquier otro tipo de comparación como if o utilizarlo en bucles.

Movimiento de gráficos mediante botones en Java

Se debe partir de un panel (jPanel) integrado en una ventana (jFrame) tal como se ha explicado en el artículo Gráficos en Java.

Esta explicación se basa en un ejemplo que realiza el movimiento de una bola utilizando cuatro botones para subir, bajar y desplazar a la derecha e izquierda. Descarga del ejemplo completo para NetBeans.

Hay declarados dos atributos en la clase Tablero (jPanel) con las coordenadas donde se debe mostrar la bola, que inicialmente están inicializados para que se muestre en la parte central del tablero. A través de la actualización de los valores de esos atributos se realizará el movimiento de la bola.

public class Tablero extends javax.swing.JPanel {
    private int posX = 45;
    private int posY = 45;

La bola se dibujará en el método paint utilizando las coordenadas anteriores, con un tamaño 10.

    public void paint(Graphics g)
    {
        super.paint(g);
        g.fillOval(posX, posY, 10, 10);
    }

En el códido del panel se han definido una serie de métodos que realizan las operaciones de movimiento deseado. En cada movimiento se modifica el atributo correspondiente para cambiar la posición de la bola y se hace la llamada al método repaint para que se ejecute de nuevo el código del paint visto antes y que se encarga de mostrar la bola.

    public void moverArriba()
    {
        posY--;
        repaint();
    }

    public void moverAbajo()
    {
        posY++;
        repaint();
    }

    public void moverDerecha()
    {
        posX++;
        repaint();
    }

    public void moverIzquierda()
    {
        posX--;
        repaint();
    }

Los botones que permiten al usuario realizar el movimiento se han incluido en la ventana, fuera del panel.


A cada botón se le ha asignado el código necesario para que realice la llamada al método que corresponda del panel para hacer el movimiento de la bola.

    private void botonArribaActionPerformed(java.awt.event.ActionEvent evt)
    {                                                
        tablero1.moverArriba();
    }                                          

    private void botonAbajoActionPerformed(java.awt.event.ActionEvent evt)
    {                                              
        tablero1.moverAbajo();
    }                                          

    private void botonIzquierdaActionPerformed(java.awt.event.ActionEvent evt)
    {                                                  
        tablero1.moverIzquierda();
    }                                              

    private void botonDerechaActionPerformed(java.awt.event.ActionEvent evt)
    {                                                
        tablero1.moverDerecha();
    }

Hay que observar el nombre que ha recibido el panel al integrarlo en la ventana. En este caso le ha dado el nombre tablero1. Este nombre puede verse en las propiedades al seleccionar el panel.


lunes, 13 de abril de 2009

Mostrar imágenes en Java

Dentro del método paint de un panel se puede insertar el código para que se cargue una imagen almacenada en un archivo, para que sea mostrada dentro de dicho panel.

Para incluir una imagen se debe llamar al método drawImage de la clase Graphics. A este método se le pasan cuatro parámetros: El primero de ellos es la referencia al objeto Image o BufferedImage que contiene la imagen a mostrar. El segundo y tercer parámetro indican la posición en la que se mostrará.

Para crear el objeto de la clase Image o BufferedImage se puede utilizar el método read de la clase ImageIO, al que se le para la referencia a un objeto File con la ruta al archivo que contiene la imagen.

    public void paint(Graphics g)
    {
        super.paint(g);

        BufferedImage img = null;
        int posx=0, posy=0;
        try
        {
            img = ImageIO.read(new File("src/recursos/ejemplo.png"));
        }
        catch (IOException e)
        {
            //Control de excepción si no se encuentra el archivo
        }
        g.drawImage(img, posx, posy, null);
    }
En este ejemplo se mostraría la imagen "ejemplo.png" que se encuentra en la carpeta "src/recursos" del proyecto. Se indica la posición 0,0 por lo que aparecerá en la esquina superior izquierda del panel.

 

Contador de visitas