Seguidores

MIS WEBS



martes, 23 de enero de 2018

EVENTOS JAVA Múltiples fuentes para un solo oyente




Múltiples fuentes para un solo oyente



 Hasta ahora hemos visto como generar un solo oyente pero múltiples fuentes, imaginemos que deseamos que un solo oyente tenga varias fuentes.
Ejemplo Realizar un marco con dos botones uno de ellos abrirá una nueva ventana cada vez que le hagamos click mientras que el segundo cerrará todas las ventanas abiertas (diferentes oyentes).
Una fuente:                                      El botón de cerrar
Diferentes oyentes:                      Todas las ventanas.



import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Practica30 {
             public static void main (String[] args) {
                    Marco xxx = new Marco();
                    xxx.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

             }
}           


class Marco extends JFrame{
      
       public  Marco() {
            
            
             add(new Lamina());
             setBounds(800,50,500,300);
             setVisible(true);
            
       }
}

class Lamina extends JPanel{
       public Lamina() {
             setBackground(Color.gray);
             //creamos los botones
             JButton Abrir;
             add( Abrir = new JButton("Abrir"));
             add(boton_cerrar = new JButton("Cerrar todo"));
             //le decimos que cundo se pulse el botón abrir
             //llame a actionlistener en la clase oyente_ventan
             Abrir.addActionListener(new oyente_ventana());
       }
      
       JButton boton_cerrar;
      
       //CREAMOS UNA CLASE INTERNA IMPLEMENTANDO ACTIONLISTENER PARA ABRIR LAS
       //LAS NUEVAS VENTANAS
       private class oyente_ventana implements ActionListener{

             public void actionPerformed(ActionEvent g) {
            
                    Nuevo nuevos_marco = new Nuevo(boton_cerrar);
                    nuevos_marco.setVisible(true);
                   
                   
             }
            
       }
       public void paintComponent(Graphics g){
             super.paintComponent(g);
             Graphics2D g22 = (Graphics2D)g;
             g22.setFont(new Font("Arial Black",Font.BOLD,50));
             g.setColor(Color.BLUE);
             g.drawString("TEXTO", 150, 175);
            
       }
      
}

//CREAMOS UN FRAME PARA LAS NUEVAS VENTANAS
class Nuevo extends JFrame{
      
       public Nuevo(JButton llamar_boton_cierre) {
             SUMA_VENTAN++;
             desplaza_ventan+=20;
             setTitle("VENTANA " +SUMA_VENTAN);
             //Para evitar que se superpongan las ventans lo
             //sumamos el eje X y el eje Y desplaza_ventan
             setBounds(30+desplaza_ventan,30+desplaza_ventan,300,150);
            
             //llamos al boton del constructor de la clase Lamina
             //que hemos pasado por parametros
             llamar_boton_cierre.addActionListener(new Cerrador());
       }
    // encapsulamos dos variable para utilizarlas solo en este constructor
       private static int SUMA_VENTAN =0;  
       private static int desplaza_ventan=0;
       //crearemos una clase interna para cerar los marcos
       private class Cerrador implements ActionListener{

             public void actionPerformed(ActionEvent e) {
                    //ultilizamos el metodo dispose() de Jframe para
                    //cerrar todos los objetos y liberar recursos
                   
                    dispose();
                   
             }
            
       }
}


No hay comentarios:

Publicar un comentario

Buscar este blog

Sandisk y Western Digital