Sei sulla pagina 1di 12

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

Potrebbero piacerti anche