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