Download UNIDAD II.- Programación Orientada a Eventos Manejo de Oyentes

Document related concepts
no text concepts found
Transcript
Tópicos Selectos de Programación
UNIDAD II.- Programación Orientada a Eventos
Manejo de Oyentes
–
Un evento es resultado de la ejecución de una acción dentro de un entorno gráfico. Los
eventos son objetos.
–
Los componentes (botones, menus, campo de texto) son generadores de eventos (origen)
–
Un origen de eventos debe registrar objetos oyentes que manipulen a los eventos
–
El paquete java.awt.event proporciona clases base para generar eventos.
–
Contiene una serie de interfaces para implementar objetos oyentes.
–
Adicionalmente proporciona un grupo de clases adaptadoras para facilitar la codificación.
Rafael Rivera López
1
Tópicos Selectos de Programación
Rafael Rivera López
2
Tópicos Selectos de Programación
Registro de Oyentes
Rafael Rivera López
3
Tópicos Selectos de Programación
Evento de Botón
Evento de Ventana
Oyente de Ventana
–
La clase oyente debe implementar todos los métodos de la interfaz WindowListener,
aunque no los use.
Rafael Rivera López
4
Tópicos Selectos de Programación
Clase Adaptadora
–
Es muy tedioso implementar interfaces si solo se ocuparán pocos métodos.
–
Java proporciona clases adaptadoras que ya implementaron todos los métodos de las
interfaces.
–
Para usarlas deben heredar a la clase oyente.
–
La clase oyente entonces hereda la clase adaptadora para el evento
–
WindowAdapter es la clase adaptadora para WindowEvent.
Oyente Interno Anónimo
–
Se puede crear un oyente anónimo utilizando la clase adaptadora.
Rafael Rivera López
5
Tópicos Selectos de Programación
Eventos de teclado
–
Las teclas solo genera eventos de la clase KeyEvent
–
Un evento de teclado tiene los siguientes elementos:
import java.awt.*;
import java.awt.event.*;
public class EventoTeclado extends Frame{
private int iX;
private int iY;
private int diametro;
private Color elColor;
public EventoTeclado(){
super("Eventos de teclado");
setSize(400,400);
setBackground(Color.CYAN);
elColor=Color.BLACK;
diametro=50;
iX=iY=100;
Rafael Rivera López
6
Tópicos Selectos de Programación
}
addEventos();
setVisible(true);
public void paint(Graphics g){
g.setColor(elColor);
g.fillOval(iX, iY, diametro, diametro);
if(elColor==Color.BLUE){
g.fillRect(iX+100, iY+100, diametro,diametro);
}
}
public void addEventos(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
int codigo=e.getKeyCode();
System.out.println("codigo="+codigo);
switch(codigo){
case KeyEvent.VK_UP: iY-=5;
break;
case KeyEvent.VK_DOWN: iY+=5;
break;
case KeyEvent.VK_RIGHT: iX+=5;
if(iX>(400-diametro))
iX=400-diametro;
break;
case KeyEvent.VK_LEFT: iX-=5;
if(iX<0)
iX=0;
break;
case KeyEvent.VK_PLUS :
if(diametro<200)
diametro+=5;
break;
case KeyEvent.VK_MINUS :
if(diametro>10)
diametro-=5;
break;
case KeyEvent.VK_B : elColor = Color.WHITE;
break;
Rafael Rivera López
7
Tópicos Selectos de Programación
case KeyEvent.VK_A : elColor = Color.BLUE;
break;
case KeyEvent.VK_V : elColor = Color.GREEN;
}
repaint();
}
});
}
}
Eventos de ratón
–
Las interfaces para oyentes de eventos de un ratón tienen los siguientes métodos.
–
–
Con getX() y getY() se obtiene la posición del ratón en el momento de generar el evento
import java.awt.*;
import java.awt.event.*;
Rafael Rivera López
8
Tópicos Selectos de Programación
public class EventoRaton extends Frame{
private int iX;
private int iY;
private boolean bPulsado;
private MenuItem salir;
private MenuItem abrir;
private MenuItem guardar;
private VentanaDialogo dialogo;
public EventoRaton(){
super("Eventos de raton");
setSize(400,400);
setBackground(Color.CYAN);
inicializarAtributos();
addMenu();
addEventos();
setVisible(true);
}
public void inicializarAtributos(){
iX=iY=100;
dialogo = new VentanaDialogo("Salir del programa",this);
}
public void paint(Graphics g){
if(bPulsado){
g.setColor(Color.BLACK);
g.fillOval(iX, iY, 20, 20);
}
g.drawString("("+iX+","+iY+")", 20, 380);
}
public void addMenu(){
MenuBar barra = new MenuBar();
Menu archivo = new Menu("Archivo");
barra.add(archivo);
salir = new MenuItem("Salir");
abrir = new MenuItem("Abrir");
guardar = new MenuItem("Guardar");
archivo.add(abrir);
archivo.add(guardar);
archivo.addSeparator();
archivo.add(salir);
setMenuBar(barra);
}
Rafael Rivera López
9
Tópicos Selectos de Programación
public void addEventos(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dialogo.setVisible(true);
}
});
abrir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
abrirArchivo();
}
});
guardar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
guardarArchivo();
}
});
salir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dialogo.setVisible(true);
}
});
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
iX=e.getX();
iY=e.getY();
bPulsado=true;
repaint();
}
public void mouseReleased(MouseEvent e){
bPulsado=false;
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
iX=e.getX();
iY=e.getY();
repaint();
}
public void mouseDragged(MouseEvent e){
iX=e.getX();
iY=e.getY();
bPulsado=true;
repaint();
Rafael Rivera López
10
Tópicos Selectos de Programación
}
}
});
public void abrirArchivo(){
FileDialog dialogo = new
FileDialog(this,"Abrir Archivo",FileDialog.LOAD);
dialogo.setFile("*.java");
dialogo.setVisible(true);
String nombre = dialogo.getDirectory()+
dialogo.getFile();
System.out.println("El nombre es "+nombre);
}
public void guardarArchivo(){
FileDialog dialogo = new
FileDialog(this,"Guardar Archivo",FileDialog.SAVE);
dialogo.setFile("*.java");
dialogo.setVisible(true);
String nombre = dialogo.getDirectory()+
dialogo.getFile();
System.out.println("El nombre es "+nombre);
}
}
import java.awt.*;
import java.awt.event.*;
public class VentanaDialogo extends Dialog{
private Button boton1;
private Button boton2;
public VentanaDialogo(String titulo,Frame padre){
super(padre,titulo,true);
setSize(200,100);
setLocation(100,100);
addComponentes();
addEventos();
}
public void addComponentes(){
boton1 = new Button("Aceptar");
boton2 = new Button("Cancelar");
Panel p = new Panel();
add(new Label("¿Desea salir?"),"North");
Rafael Rivera López
11
Tópicos Selectos de Programación
p.add(boton1);
p.add(boton2);
add(p,"South");
}
public void addEventos(){
boton1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
boton2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
setVisible(false);
}
});
}
}
Rafael Rivera López
12