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, eventos (origen)
menus,
campo
de
texto)
son
generadores
de
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.
Evento de Bot贸n
Evento de Ventana
Oyente de Ventana La clase oyente debe implementar WindowListener, aunque no los use.
todos
los
m茅todos
de
la
interfaz
Clase Adaptadora Es muy tedioso implementar interfaces si solo se ocuparán pocos métodos. Java proporciona clases adaptadoras métodos de las interfaces.
que
ya
implementaron
todos
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.
los
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; 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; 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.*; 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); } 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();
} }); } 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"); 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); } }); }
}