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.

37 Comentarios | deja el tuyo

2 enlaces entrantes

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

  1. dani dice:

    como seria pasar el mouse sobre un eitquta q q en un cuadro de texto aparesca el nombre de la eiqueta

  2. JESUS ALBERTO dice:

    ESTOS CODIGOS SON MUY BUENOS YA QUE PERMITE ADQUIRIR CONOCIMIENTOS SOBRE COMO TRABAJAR CON EL MOUSE, YA QUE LO MAS IMPORTANTE ES ENTENDER EL FUNCIONAMIENTO Y QUE ESTRUCTURA TIENE EL USO DEL MOUSE.

  3. Andres dice:

    disculpa, como seria si quiero que al momento de implementar un actionlistener, por ejemplo tengo mi menu linea, cuando le doy clic tengo que dar el punto inicial y final mediante el mouse, me podrias ayudar? gracias

¡Déjanos tu comentario!