Buscar este blog

miércoles, 1 de mayo de 2013

TEMA 8 Eventos en Java.


Problema 1:
Confeccionar una ventana que muestre un botón. Cuando se presione finalizar la ejecución del
programa Java.
Programa:
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener {
JButton boton1;
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,450,350);
formulario1.setVisible(true);
}
}
La mecánica para atrapar el clic del objeto de la clase JButton se hace mediante la implementación de
una interface. Una interface es un protocolo que permite la comunicación entre dos clases. Una
interface contiene uno o más cabecera de métodos, pero no su implementación.
Por ejemplo la interface ActionListener tiene la siguiente estructura:
interface ActionListener {
public void actionPerformed(ActionEvent e) {
}
Luego las clases que implementen la interface ActionListener deberán especificar el algoritmo del
método actionPerformed.
Mediante el concepto de interfaces podemos hacer que desde la clase JButton se puede llamar a un
método que implementamos en nuestra clase.
Para indicar que una clase implementará una interface lo hacemos en la declaración de la clase con la
sintaxis:
public class Formulario extends JFrame implements ActionListener {
Con esto estamos diciendo que nuestra clase implementa la interface ActionListener, luego estamos
obligados a codificar el método actionPerformed.
Definimos un objeto de la clase JButton:
JButton boton1;
En el constructor creamos el objeto de la clase JButton y mediante la llamada del método
addActionListener le pasamos la referencia del objeto de la clase JButton utilizando la palabra clave this
(this almacena la dirección de memoria donde se almacena el objeto de la clase JFrame, luego mediante
dicha dirección podemos llamar al método actionPerformed):
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
El método actionPerformed (este método de la interface ActionListener debe implementarse
obligatoriamente, en caso de no codificarlo o equivocarnos en su nombre aparecerá un mensaje de
error en tiempo de compilación de nuestro programa.
El método actionPerformed se ejecutará cada vez que hagamos clic sobre el objeto de la clase JButton.
La interface ActionListener y el objeto de la clase ActionEvent que llega como parámetro están definidos
en el paquete:
import java.awt.event.*;
Es decir que cada vez que se presiona el botón desde la clase JButton se llama al método
actionPerformed y recibe como parámetro un objeto de la clase ActionEvent.
En el método actionPerformed mediante el acceso al método getSource() del objeto que llega como
parámetro podemos analizar que botón se presionó:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
Si se presionó el boton1 luego el if se verifica verdadero y por lo tanto llamando al método exit de la
clase System se finaliza la ejecución del programa.
Problema 2:
Confeccionar una ventana que contenga tres objetos de la clase JButton con las etiquetas "1", "2" y "3".
Al presionarse cambiar el título del JFrame indicando cuál botón se presionó.
Programa:
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
private JButton boton1,boton2,boton3;
public Formulario() {
setLayout(null);
boton1=new JButton("1");
boton1.setBounds(10,100,90,30);
add(boton1);
boton1.addActionListener(this);
boton2=new JButton("2");
boton2.setBounds(110,100,90,30);
add(boton2);
boton2.addActionListener(this);
boton3=new JButton("3");
boton3.setBounds(210,100,90,30);
add(boton3);
boton3.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
setTitle("boton 1");
}
if (e.getSource()==boton2) {
setTitle("boton 2");
}
if (e.getSource()==boton3) {
setTitle("boton 3");
}
}
public static void main(String[] ar){
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,350,200);
formulario1.setVisible(true);
}
}
Debemos declarar 3 objetos de la clase JButton:
private JButton boton1,boton2,boton3;
En el constructor creamos los tres objetos de la clase JButton y los ubicamos dentro del control JFrame
(también llamamos al método addActionListener para enviarle la dirección del objeto de la clase
Formulario):
public Formulario() {
setLayout(null);
boton1=new JButton("1");
boton1.setBounds(10,100,90,30);
add(boton1);
boton1.addActionListener(this);
boton2=new JButton("2");
boton2.setBounds(110,100,90,30);
add(boton2);
boton2.addActionListener(this);
boton3=new JButton("3");
boton3.setBounds(210,100,90,30);
add(boton3);
boton3.addActionListener(this);
}
Cuando se presiona alguno de los tres botones se ejecuta el método actionPerformed y mediante tres if
verificamos cual de los botones se presionó:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
setTitle("boton 1");
}
if (e.getSource()==boton2) {
setTitle("boton 2");
}
if (e.getSource()==boton3) {
setTitle("boton 3");
}
}
Según el botón presionado llamamos al método setTitle que se trata de un método heredado de la clase
JFrame y que tiene por objetivo mostrar un String en el título de la ventana.
Problema propuesto
1. Disponer dos objetos de la clase JButton con las etiquetas: "varón" y "mujer", al presionarse
mostrar en la barra de títulos del JFrame la etiqueta del botón presionado.
package EJERCICIOS1;
import javax.swing.*;
import java.awt.event.*;
public class problema3 extends JFrame implements ActionListener{
private JButton mujer,varon;

public problema3() {
setLayout(null);
mujer=new JButton("mujer");
mujer.setBounds(10,100,90,30);
add(mujer);
mujer.addActionListener(this);
varon=new JButton("varon");
varon.setBounds(110,100,90,30);
add(varon);
varon.addActionListener(this);}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==mujer) {
setTitle("mujer");}
if (e.getSource()==varon) {
setTitle("varon");}}
public static void main(String[] ar){
problema3 formulario1=new problema3();
formulario1.setBounds(0,0,350,200);
formulario1.setVisible(true);
}}

Ejercicios resueltos 2.
Ejercicio 1. Eventos de Ratón (MouseListener)
package EJERCICIOS2;
//Demostración de los eventos de ratón.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ejercicio201 extends JFrame implements MouseListener, MouseMotionListener
{private JLabel barraEstado;
//configurar GUI y registrar manejadores de eventos de ratón
public ejercicio201()
{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);
ejercicio201 aplicacion = new ejercicio201();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}} // fin de la clase RastreadorRaton
 Ejercicio 2. Eventos de teclado (KeyListener)
package EJERCICIOS2;
// Demostración de los eventos de pulsación de tecla.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Ejercicio202 extends JFrame implements KeyListener {
private String linea1 = "", linea2 = "", linea3 = "";
private JTextArea areaTexto;
// configurar GUI
public Ejercicio202()
{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);
Ejercicio202 aplicacion = new Ejercicio202();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );}
} // fin de la clase DemoTeclas

No hay comentarios:

Publicar un comentario