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