gentoo linux, java, software libre y otras hierbas
dic, 13 2007 - 1:19 pm

[código] GUIs en Java – Eventos de Mouse y Teclado

(anterior) En esta sección se presentan varios de los componentes de Java para la creación de interfaces gráficas de usuario. Los componentes de Swing pueden personalizarse para asemejarse a la apariencia de la plataforma computacional en la que se ejecute el programa, o pueden usar la apariencia visual de Java para brindar una interfaz idéntica en cualquier Sistema Operativo. Esta sección se centra en el manejo de eventos de Mouse y de Teclado.

Demostración de los eventos de Ratón (MouseListener)

// Demostración de los eventos de ratón.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RastreadorRaton extends JFrame implements MouseListener, MouseMotionListener
{
   private JLabel barraEstado;
   // configurar GUI y registrar manejadores de eventos de ratón
   public RastreadorRaton()
   {
      super( "Demostración de los eventos de ratón" );

      barraEstado = new JLabel();
      getContentPane().add( barraEstado, BorderLayout.SOUTH);

      getContentPane().addMouseListener( this );        // escucha sus propios eventos de ratón
      getContentPane().addMouseMotionListener( this );  // y de movimiento de ratón

      setSize( 300, 125 );
      setVisible( true );
   }

   // Manejadores de eventos de MouseListener
   // manejar el evento cuando el botón del ratón se suelta inmediatamente después de oprimir
   public void mouseClicked( MouseEvent evento )
   {
      barraEstado.setText( "Se hizo clic en [" + evento.getX() +
         ", " + evento.getY() + "]" );
   }

   // manejar evento cuando se oprime el botón del ratón
   public void mousePressed( MouseEvent evento )
   {
      barraEstado.setText( "Se oprimió en [" + evento.getX() +
         ", " + evento.getY() + "]" );
   }

   // manejar evento cuando se suelta el ratón después de arrastrar
   public void mouseReleased( MouseEvent evento )
   {
      barraEstado.setText( "Se soltó en [" + evento.getX() +
         ", " + evento.getY() + "]" );
   }

   // manejar el evento cuando el ratón entra al área
   public void mouseEntered( MouseEvent evento )
   {
      barraEstado.setText( "Ratón entro en [" + evento.getX() +
         ", " + evento.getY() + "]" );
      getContentPane().setBackground( Color.GREEN );
   }

   // manejar evento cuando el ratón sale del área
   public void mouseExited( MouseEvent evento )
   {
      barraEstado.setText( "Ratón fuera de la ventana" );
      getContentPane().setBackground( Color.WHITE );
   }

   // Manejadores de eventos de MouseMotionListener
   // manejar el evento cuando el usuario arrastra el ratón con el botón oprimido
   public void mouseDragged( MouseEvent evento )
   {
      barraEstado.setText( "Se arrastró en [" + evento.getX() +
         ", " + evento.getY() + "]" );
   }

   // manejar el evento cuando el usuario mueve el ratón
   public void mouseMoved( MouseEvent evento )
   {
      barraEstado.setText( "Se movió en [" + evento.getX() +
         ", " + evento.getY() + "]" );
   }

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      RastreadorRaton aplicacion = new RastreadorRaton();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }
} // fin de la clase RastreadorRaton

Descargar código fuente

Uso de la clase MouseMotionAdapter

// Uso de la clase MouseMotionAdapter.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Pintor extends JFrame {
	private int cuentaPuntos = 0;
	private JLabel j=new JLabel("Van: "+cuentaPuntos+" puntos");
   // arreglo de 1000 referencias a java.awt.Point
   private Point puntos[] = new Point[ 2000 ];  

   // configurar GUI y registrar manejador de eventos de ratón
   public Pintor()
   {
      super( "Un programa simple de dibujo" );

      // crear una etiqueta y colocarla en la parte SOUTH del esquema BorderLayout

      getContentPane().add( new JLabel( "Arrastre el ratón para dibujar" ),
         BorderLayout.SOUTH );
      getContentPane().add( j,BorderLayout.NORTH );
      addMouseMotionListener(

         new MouseMotionAdapter() {  // clase interna anónima

            // almacenar coordenadas de arrastre y llamar a repaint
            public void mouseDragged( MouseEvent evento )
            {
               if ( cuentaPuntos < puntos.length ) {
                  puntos[ cuentaPuntos ] = evento.getPoint();
                  ++cuentaPuntos;
                  repaint();
                  j.setText("Van: "+cuentaPuntos+" puntos, le quedan: "+(2000-cuentaPuntos)+"puntos");
               }
            }   

         } // fin de la clase interna anónima

      ); // fin de la llamada a addMouseMotionListener

      setSize( 400, 200 );
      setVisible( true );  

   } // fin del constructor de Pintor

   // dibujar óvalo en un cuadro delimitador de 4 por 4 en ubicación especificada en ventana
   public void paint( Graphics g )
   {
      super.paint( g ); // borra el área de dibujo

      for ( int i = 0; i < puntos.length &amp;&amp; puntos[ i ] != null; i++ )
         g.fillOval( puntos[ i ].x, puntos[ i ].y, 4, 4 );
   }

   public static void main( String args[] )
   {
      Pintor aplicacion = new Pintor();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase Pintor

Descargar código fuente

Demostración de los clics de ratón y cómo diferenciar entre los botones del ratón (MouseAdapter)

// Demostración de los clics de ratón y cómo diferenciar entre los botones del ratón.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DetallesRaton extends JFrame
{
   private int xPos, yPos;
   // establecer cadena barra título; registrar escucha ratón; ajustar tamaño y mostrar ventana
   public DetallesRaton()
   {
      super( "Clics y botones del ratón" );

      getContentPane().addMouseListener( new ManejadorClicsRaton() ); 

      setSize( 350, 150 );
      setVisible( true );
   }

   // dibujar objeto String en la ubicación donde se hizo clic con el ratón
   public void paint( Graphics g )
   {
      // llamar al método paint de la superclase
      super.paint( g );

      g.drawString( "Se hizo clic en: [" + xPos + ", " + yPos + "]",
         xPos, yPos );
   }

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      DetallesRaton aplicacion = new DetallesRaton();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

   // clase interna para manejar eventos de ratón
   private class ManejadorClicsRaton extends MouseAdapter {

      // manejar evento de clic del ratón y determinar cuál botón se oprimió
      public void mouseClicked(MouseEvent evento)
      {
         xPos = evento.getX();
         yPos = evento.getY();

         String titulo = "Se hizo clic " + evento.getClickCount() + " Veces";

         if ( evento.isMetaDown() )  // botón derecho del ratón
            titulo += " con el botón derecho del ratón";

         else if ( evento.isAltDown() )  // botón de en medio del ratón
            titulo += " con el botón central del ratón";

         else  // botón izquierdo del ratón
            titulo += " con el botón izquierdo del ratón";

         setTitle( titulo );  // establecer barra de título de la ventana
         repaint();

      } // fin del método mouseClicked

   } // fin de la clase interna privada ManejadorClicsRaton

} // fin de la clase DetallesRaton

Descargar código fuente

Demostración de los eventos de teclado (KeyListener)

// Demostración de los eventos de pulsación de tecla.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DemoTeclas extends JFrame implements KeyListener {
   private String linea1 = "", linea2 = "", linea3 = "";
   private JTextArea areaTexto;

   // configurar GUI
   public DemoTeclas()
   {
      super( "Demostración de eventos de pulsación de tecla" );

      // establecer objeto JTextArea
      areaTexto = new JTextArea( 10, 15 );
      areaTexto.setText( "Oprima cualquier tecla en el teclado..." );
      areaTexto.setEnabled( false );
      areaTexto.setDisabledTextColor( Color.blue );
      getContentPane().add( areaTexto );

      addKeyListener( this );  // permitir al marco procesar eventos de teclas

      setSize( 350, 100 );
      setVisible( true );

   } // fin del constructor de DemoTeclas

   // manejar evento de pulsación de cualquier tecla
   public void keyPressed( KeyEvent evento )
   {
      linea1 = "Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() );
      establecerLineas2y3( evento );
   }

   // manejar evento de liberación de cualquier tecla
   public void keyReleased( KeyEvent evento )
   {
      linea1 = "Se soltó tecla: " + evento.getKeyText( evento.getKeyCode() );
      establecerLineas2y3( evento );
   }

   // manejar evento de pulsación de una tecla de acción
   public void keyTyped( KeyEvent evento )
   {
      linea1 = "Se escribió tecla: " + evento.getKeyChar();
      establecerLineas2y3( evento );
   }

   // establecer segunda y tercera líneas de salida
   private void establecerLineas2y3( KeyEvent evento )
   {
      linea2 = "Esta tecla " + ( evento.isActionKey() ? "" : "no " ) +
         "es una tecla de acción";

      String temp = evento.getKeyModifiersText( evento.getModifiers() );

      linea3 = "Teclas modificadoras oprimidas: " +
         ( temp.equals( "" ) ? "ninguna" : temp );

      areaTexto.setText( linea1 + "\n" + linea2 + "\n" + linea3 + "\n" );
   }

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      DemoTeclas aplicacion = new DemoTeclas();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase DemoTeclas

Descargar código fuente

Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

36 Comentarios | deja el tuyo

2 enlaces entrantes

34 Comentarios en “[código] GUIs en Java – Eventos de Mouse y Teclado”

  1. Fatima dice:

    muy buen articulo!

  2. Casidiablo dice:

    Espero que te haya servido… gracias por los comentarios ;)

  3. demostracion de los eventos dice:

    es un muy buen articulo, pero casi diablo me gustaria que me pudiras ayudar con unas cosas q aun no entiendo bien en java, como me podria comunicar contigo o un mail mas privado o algo, gracias si me respondes

  4. Casidiablo dice:

    Dudas acerca de Java, en el foro de elhacker.net.

    Gracias!

  5. Javihm77 dice:

    Muy buen post, me sirvió mucho…

  6. eduardo dice:

    Excelente, muchísimas gracias.

  7. alexander dice:

    buen articulo me fue de gran utilidad

  8. yasmani Criales Bernal dice:

    hola me parecio muy interesante tu guia de estudio ya que soy un estudiante que recien esta aprendiendo a programar en java y en verdad estoy aprediendo de esta guia espero que me mandes nuevas guias para que puedes seguir aprendiendo chauuuuuuuuu y gracias por todo…..

  9. MAO dice:

    El aporte es excelente!!! muchas gracias por compartir el codigo para mi es de gran ayuda, es mucho mas facil aprender las cosas cuando las vez funcionando… MUCHAS GRACIAS

  10. Mike dice:

    Exelente aporte, muy agradecido

  11. cesar dice:

    gracias me sirvio de mucha ayuda

  12. Eduardo E dice:

    Gracias men, de veras que con esto haces Fácil lo que es muy fácil…. Pude haberme complicado un montón…

    éxitos en tu vida y que todo te salga bien…

  13. jmmc dice:

    esta informacion es oro, gracias por el artilo esta excelente

  14. jmmc dice:

    me olvidaba, felices fiestas de fin de año…

¡Déjanos tu comentario!