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