[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)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | // 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 |
Uso de la clase MouseMotionAdapter
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | // 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 && 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 |
Demostración de los clics de ratón y cómo diferenciar entre los botones del ratón (MouseAdapter)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | // 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 |
Demostración de los eventos de teclado (KeyListener)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | // 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 |
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
como seria pasar el mouse sobre un eitquta q q en un cuadro de texto aparesca el nombre de la eiqueta
Para eso usas el metodo setTooltipText.
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.
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