domingo, 26 de septiembre de 2021

SEMANA 9 - TALLER 5 - CAPTURA DE EVENTOS Y ESCANEO DE DATOS.

 

Elementos/atributos complejos de los frames - El blog de las Páginas Webs


USO DE BOTONES VISUALES


Ahora veremos la captura de eventos con los controles visuales. Uno de los eventos más comunes es cuando hacemos clic sobre un botón.
Java implementa el concepto de interfaces para poder llamar a métodos de una clase existente a una clase desarrollada por nosotros.

Problema 1:

Confeccionar una ventana que muestre un botón. Cuando se presione finalizar la ejecución del programa Java.

Programa:

Clic en la imagen para ampliar...

 *******


 VER VIDEO

 

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 algorítmo 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ón 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.
La main no varía en nada con respecto a problemas anteriores.

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ó.
JButton

Programa:

Clic en la imagen para ampliar...


  VER VIDEO

 

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.
 
ESCANEO DE DATOS

Así como podríamos decir que el control JLabel remplaza a la salida estándar System.out.print, el control JTextField cumple la función de la clase Scanner para la entrada de datos.
El control JTextField permite al operador del programa ingresar una cadena de caracteres por teclado.

Problema 1:

Confeccionar un programa que permita ingresar el nombre de usuario y cuando se presione un botón mostrar el valor ingresado en la barra de títulos del JFrame.

Programa:

import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
    private JTextField textfield1;
    private JLabel label1;
    private JButton boton1;
    public Formulario() {
        setLayout(null);
        label1=new JLabel("Usuario:");
        label1.setBounds(10,10,100,30);
        add(label1);
        textfield1=new JTextField();
        textfield1.setBounds(120,10,150,20);
        add(textfield1);
        boton1=new JButton("Aceptar");
        boton1.setBounds(10,80,100,30);
        add(boton1);
        boton1.addActionListener(this);
    }
    
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==boton1) {
            String cad=textfield1.getText();
            setTitle(cad);
        }
    }
    
    public static void main(String[] ar) {
        Formulario formulario1=new Formulario();
        formulario1.setBounds(0,0,350,170);
        formulario1.setVisible(true);
    }
}
 

 VER VIDEO


Definimos los tres objetos que colaboran con nuestra aplicación:
public class Formulario extends JFrame implements ActionListener{
    private JTextField textfield1;
    private JLabel label1;
    private JButton boton1;
En el constructor creamos los tres objetos y los ubicamos:
    public Formulario() {
        setLayout(null);
        label1=new JLabel("Usuario:");
        label1.setBounds(10,10,100,30);
        add(label1);
        textfield1=new JTextField();
        textfield1.setBounds(120,10,150,20);
        add(textfield1);
        boton1=new JButton("Aceptar");
        boton1.setBounds(10,80,100,30);
        add(boton1);
        boton1.addActionListener(this);
    }
En el método actionPerformed se verifica si se presionó el objeto JButton, en caso afirmativo extraemos el contenido del control JTextField mediante el método getText:
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==boton1) {
            String cad=textfield1.getText();
            setTitle(cad);
        }
    }
En la variable auxiliar cad almacenamos temporalmente el contenido del JTextField y seguidamente actualizamos el título del control JFrame.

Problema 2:

Confeccionar un programa que permita ingresar dos números en controles de tipo JTextField, luego sumar los dos valores ingresados y mostrar la suma en la barra del título del control JFrame.

Programa:

import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
    private JTextField textfield1,textfield2;
    private JButton boton1;
    public Formulario() {
        setLayout(null);
        textfield1=new JTextField();
        textfield1.setBounds(10,10,100,30);
        add(textfield1);
        textfield2=new JTextField();
        textfield2.setBounds(10,50,100,30);
        add(textfield2);
        boton1=new JButton("Sumar");
        boton1.setBounds(10,90,100,30);
        add(boton1);
        boton1.addActionListener(this);
    }
    
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==boton1) {
            String cad1=textfield1.getText();
            String cad2=textfield2.getText();
            int x1=Integer.parseInt(cad1);
            int x2=Integer.parseInt(cad2);
            int suma=x1+x2;
            String total=String.valueOf(suma);
            setTitle(total);
        }
    }
    
    public static void main(String[] ar) {
        Formulario formulario1=new Formulario();
        formulario1.setBounds(0,0,240,170);
        formulario1.setVisible(true);
    }
}
 

 VER VIDEO

 
 
Definimos los tres objetos:
public class Formulario extends JFrame implements ActionListener{
    private JTextField textfield1,textfield2;
    private JButton boton1;
En el método actionPerformed es donde debemos sumar los valores ingresados en los controles de tipo JTextField. Para extraer el contenido de los controles debemos extraerlos con el método getText:
            String cad1=textfield1.getText();
            String cad2=textfield2.getText();
Como debemos sumar numéricamente los valores ingresados debemos convertir el contenido de las variables cad2 y cad2 a tipo de dato int:
            int x1=Integer.parseInt(cad1);
            int x2=Integer.parseInt(cad2);
El método parseInt de la clase Integer retorna el contenido de cad1 convertido a int (provoca un error si ingresamos caracteres en el control JTextField en lugar de números)
Una vez que tenemos los dos valores en formato numérico procedemos a sumarlos y almacenar el resultado en otra variable auxiliar:
            int suma=x1+x2;
Ahora tenemos que mostrar el valor almacenado en suma en la barra de títulos del control JFrame, pero como el método setTitle requiere un String como parámetro debemos convertirlo a tipo String:
            String total=String.valueOf(suma);
            setTitle(total);
Como veremos de acá en adelante es muy común la necesidad de convertir String a enteros y enteros a String:
De String a int:
            int x1=Integer.parseInt(cad1);
De int a String:
            String total=String.valueOf(suma);

 

ACTIVIDAD:


Crea las 4 vistas de cada modulo del proyecto en JAVA SWING con base en el diseño semifuncional y desarrolla los ejercicios propuestos.


Condiciones de la Actividad: 

  • Realizar todos los ejercicios prácticos.
  • Desarrollar los ejercios usando un IDE de desarrollo.
  • Desarrollar las vistas o frames de tu aplicación.
  • Tomar los pantallazos de ejecución de los ejercicios.
  • Subir todo el material en la carperta correspondiente del Drive y del Classroom.

Pasos de la Actividad: 
  1. Realiza los ejemplos anteriores, analizalos y subelos al drive.
  2. Descarga el siguiente ejemplo, analizalo y utilizalo como referencia o material de apoyo para el desarrollo de tu programa.


  1. Realiza el siguiente ejercicio: Disponer dos clase JButton con las etiquetas: "Niño" y "Niña", al presionarse el botón que aparezca en la barra de títulos del JFrame la etiqueta de la opción seleccionada.
  2. Implementa los contenidos trabajados diseñando la interfaz grafica o capa de presentación (Botones para pasar de Frame a Frame los componentes graficos, jtextfield y demás); ten en cuenta el pre-diseño semifuncional del taller anterior hecho en Power Point.
Nota: 
  • Los 4 Frames básicos del modulo de usuario son: Bienvenida, Inicio, Mensajes y Ayudas. 
  • Los 4 Frames básicos del modulo de administrador son: Bienvenida, Inicio, Administración y Ayudas.

 

Rubrica de Evaluación:
  • Realiza todos los ejercicios propuestos.
  • Cumple con todos los pasos de la actividad.
  • Desarrolla los ejercios usando el IDE.
  • Toma los pantallazos de ejecución de los ejercicios.
  • Sube todo el material en la carperta correspondiente del Drive (Archivos .java, .class, pantallazo de la ejecución de cada uno de los programas) y en el Classroom asignar como entrega un enlace a la carpeta respectiva del Drive.
 

Cibergrafía y agradecimientos a: www.tutorialesprogramacionya.com

 

No hay comentarios:

Publicar un comentario