Download Applets - fc
Document related concepts
no text concepts found
Transcript
Applets Programacion Applets ARQUITECTURA DE APPLETVIEWER Ciclo de vida de un Applet •Se crea una instancia de la clase que controla el applet. En el ejemplo de la figura anterior, sería la clase HolaMundo. •El applet se incializa. •El applet comienza a ejecutarse. •El applet empieza a recibir llamadas. Primero recibe una llamada init (inicializar), seguida de un mensaje start (empezar) y paint (pintar). Estas llamadas pueden ser recibidas asíncronamente. METODOS DE APPLETVIEWER init() El método init() se llama cada vez que el appletviewer carga por primera vez la clase. start() start() es la llamada para arrancar el applet cada vez que es visitado. stop() stop() es la llamada para detener la ejecución del applet. destroy() El método destroy() se llama cuando ya no se va a utilizar más el applet paint( Graphics g ) Es la función llamada cada vez que el área de dibujo del applet necesita ser refrescada. update( Graphics g ) Esta es la función que realmente se llama cuando se necesita una actualización de la pantalla. repaint Llamando a este método se podrá forzar la actualización de un applet UN APPLET BASICO EN JAVA // Applet HolaMundo de ejemplo import java.awt.Graphics; import java.applet.Applet; public class HolaMundo extends Applet { public void paint( Graphics g ) { g.drawString( "Hola Mundo!",25,25 ) ; } } // // Applet HolaMundo de ejemplo // <HTML> <APPLET> <CODE = HolaMundo.class WIDTH = 100 HEIGHT = 80> </APPLET> </HTML> Ejemplos de Applets /* Propósito: Generar seis números aleatorios entre 1 y 51 para una quiniela del melate. * El applet tiene un campo de texto para mostrar los valores y un botón * para ejecutar la acción. Cuando se presiona el botón se generan 6 números aleatorios para * la quiniela. * Nombre: Héctor E. Medellin * Fecha : 7 de febrero de 2006 * Curso de Programación */ import java.applet.*;//necesario para los Applets import java.awt.*;//necesario para manejo de componentes gráficos public class Melate extends Applet{ Miembros dato del Applet TextField salida; //lineas de texto para salida Button boton; //boton para generar quiniela int n1,n2,n3,n4,n5,n6;//números aleatorios public void init(){ //crea objetos gráficos salida = new TextField(5); boton = new Button("generar quiniela"); //para colocarlos libremente hay que hacer el esquema nulo setLayout(null); //establecer dimensiones de las comp. (x,y,ancho,alto) salida.setBounds(50,50,150,25); boton.setBounds(50,110,120,30); //agregar las componentes gráficas add(salida); add(boton); } Métodos public void melate(){ n1 = (int)(Math.random()*51+1); n2 = (int)(Math.random()*51+1); n3 = (int)(Math.random()*51+1); n4 = (int)(Math.random()*51+1); n5 = (int)(Math.random()*51+1); n6 = (int)(Math.random()*51+1); } public boolean action(Event e, Object o){ if(e.target == boton){//si se preciono el boton melate(); salida.setText(""+n1+", "+n2+", "+n3+", "+n4+", "+n5+", "+n6); } return true; } } Vectores en Pascal Lectura de un vector en Pascal Pascal Program Vector; var num,i : integer; vec : array[1..10]of integer; Begin readln(num); for i:=1 to num do readln(vec[i]); for i:=1 to num do writeln(vec[i]); End. Vectores en C Lectura de un vector en C C #include <stdio.h> void main() { int num,i; int vec[10]; scanf(“%d”,&num); for(i = 0; i<10; i++) scanf(“%d”,&vec[i]); for(i = 0; i<10; i++) printf(“%d”,vec[i]) } Una aplicación en Java Para la lectura de datos desde la consola es conveniente utilizar un paquete. El paquete que utilizamos es javabook que contiene clases para leer números enteros, reales y cadenas. Java import javabook.*; public class Vector{ public static void main(String[] args) { SimpleInput entrada = new SimpleInput(); int vec[],i; vec = new int[10];// o int vec[] = new int[10]; for(i = 0; i<10; i++) vec[i] = entrada.getInteger(“Tecle un valor entero:”); for(i = 0; i<10; i++) System.out.println(“”+vec[i]); } } Ejemplo de applet con vectores /* Propósito: Generar una quiniela aleatoria de progol. * El applet tiene un boton para ejecutar la acción. * Cuando se presiona el boton se generan la quiniela de progol * Nombre: Héctor E. Medellin * Fecha : 7 de febrero de 2006 * Curso de Programación */ import java.applet.*;//necesario para los Applets import java.awt.*; //necesario para manejho de componentes gráficos public class Progol extends Applet{ Creación de objetos Button boton; //boton para generar quiniela int juego[]; //resultados de la quiniela aleatorios public void init(){ //crea objetos gráficos boton = new Button("generar quiniela"); //crear quiniela juego = new int[14]; //para colocarlos libremente hay que hacer el esquema nulo setLayout(null); //establecer dimensiones de las componentes (x,y,ancho, /// alto) boton.setBounds(50,350,120,30); //agregar las componentes gráficas add(boton); } Métodos public void quiniela(){ int i; for(i = 0; i<14; i++) juego[i] = (int)(Math.random()*3); } public boolean action(Event e, Object o){ if(e.target == boton){//si se preciono el boton quiniela(); repaint(); } return true; } Método paint public void paint(Graphics g){ int i; g.drawString("Local Empate Visitante",100,30); for(i = 0; i<14; i++){ g.drawString(""+(i+1),80,35+(i+1)*15); if(juego[i]==0) g.fillRect(100,40+i*15,20,10); else g.drawRect(100,40+i*15,20,10); if(juego[i]==1) g.fillRect(150,40+i*15,20,10); else g.drawRect(150,40+i*15,20,10); if(juego[i]==2) g.fillRect(200,40+i*15,20,10); else g.drawRect(200,40+i*15,20,10); } } } Applet del mcd /* Propósito: calcular el máximo común divisor de dos números utilizando una función. * El applet tiene tres campos de texto para los valores y el resultado y un boton * para ejecutar la acción. Cuando se presiona el boton se calcula el valor del mcd de los * números tecleados en los dos campos de texto de entrada. * Nombre: Héctor E. Medellin * Fecha : 7 de febrero de 2006 * Curso de Programación */ import java.applet.*;//necesario para los Applets import java.awt.*; //necesario para manejo de componentes gráficos public class PruebaMCDApplet extends Applet{ TextField entrada1,entrada2,salida; //lineas de texto para entrada y salida Button boton; //boton para llamar a la funcion Label mcdEtiqueta; int num1,num2,valor; //números tecleados y mdc Método init() public void init(){ //crea objetos gráficos entrada1 = new TextField(5); entrada2 = new TextField(5); salida = new TextField(5); boton = new Button("calcular mcd"); mcdEtiqueta = new Label("M.C.D."); //para colocarlos libremente hay que hacer el esquema nulo setLayout(null); //establecer dimensiones de las componentes (x, y, ancho, alto) entrada1.setBounds(50,50,80,25); entrada2.setBounds(50,80,80,25); salida.setBounds(150,50,80,25); boton.setBounds(50,110,100,25); mcdEtiqueta.setBounds(150,30,80,25); //agregar las componentes gráficas add(entrada1); add(entrada2); add(salida); add(boton); add(mcdEtiqueta); } Método mcd() static public int mcd(int m, int n){ int a,b,res; // dtermina cual de los dos números es el mayor if(m>n){ a = m; b = n; } else{ a = n; b = m; } //algoritmo de Euclides para mcd while(b != 0){ res = a%b; a = b; b = res; } return a; } Método action() public boolean action(Event e, Object o){ if(e.target == boton)//si se preciono el boton if(sonOperandosValidos()){//si los números son válidos valor = mcd(num1,num2); salida.setText(""+valor); } return true; } Métodos sonOperandosValidos() private boolean sonOperandosValidos(){ boolean b; try{//si alguno de los números no esta correctamente escrito, //se salta a ejecutar la parte de catch num1 = Integer.parseInt(entrada1.getText()); num2 = Integer.parseInt(entrada2.getText()); b = true; } catch(NumberFormatException e){ b = false; } return b; } Applet en ejecución Resumen de Applets Un applet es una aplicación pequeña. Requiere de una clase derivada de la clase Applet (hija de Applet). Para visualizar un applet con AppletViwerr se requiere un archivo HTM. En el método init() se construyen los objetos del applet. Puede usarse también un constructor. El método paint() se ejecuta cada que se redibuja el applet. El método action() procesa las herramientas visuales que responden a acciones (botones, barras de scroll, campos de texto). Para posicionar componentes libremente (posicionamiento absoluto) se requiere de poner el esquema como null, es decir, incluir en init() setLayout(null). El posicionamiento se realiza con <objeto>.setBounds(x,y,w,h). Se pueden declarar todos los métodos que se requiera dentro de un applet para llevar a cabo su labor. Constructores y métodos de algunas herramientas Button Button() – botón sin rótulo Button(String s) – botón con rótulo TextField TextField() – sin parámetros TextField(int columnas) – número de columnas TextField(String s) – texto exhibido TextField(String s, int columnas) – texto exhibido y número de columnas setEditable(boolean b) – establece como editable o no. setText(String s) – establece el texto del campo. Choice Choice() – constructor sin parámetros int countItems() – devuelve el número de elementos del Choice String getItem(int index) – devuelve el elemento del Choice en la posición index. addItem(String s) – agrega una opción a un Choice. String getSelectedItem() – devuelve el elemento de Choice selecionado int getSelectedIndex() – devuelve el indice del elemento de Choice selecionado Esqueleto de un Applet Comentarios import java.applet.*; import java.awt.*; public class Sentencias import Nombre del applet extends Applet { Declaraciones de objetos y variables Declaraciones Declaraciones de métodos Métodos } Actividades Cada problema 0.5 puntos. En cada caso escriba un archivo HTM. 1. Escriba un applet que incluya un botón (Button) y un campo de texto (TextField), cree los objetos en el método init(). Posicione el botón en la coordenada (100,50) y el campo de texto en la (100,150). 2. Escriba un applet que dibuje la figura que se muestra. 3. Escriba un applet con un botón que simule una tirada de dados. Los dados deberán tirarse cada que se presiona en botón. Dibuje los dados como se muestra. Escriba un método para dibujar un dado que acepte un número entero, las coordenadas del dado y un objeto Graphics. Eventos del mouse public boolean mouseDown(Event e, int x, int y) – ocurre cuando se presiona el botón public boolean mouseUp(Event e, int x, int y) – ocurre cuando se suelta el botón public boolean mouseMove(Event e, int x, int y) – ocurre cuando se mueve el botón public boolean mouseExit(Event e, int x, int y) – ocurre cuando el cursor de mouse sale del área de la componente. public boolean mouseEnter(Event e, int x, int y) – ocurre cuando el cursor del mouse entra al área de la componente public boolean mouseDrag(Event e, int x, int y) – ocurre cuando se presiona el botón y se mueve el ratón. Ejemplo de eventos de mouse import java.applet.*;//necesario para los Applets import java.awt.*;//necesario para manejo de componentes gráficos public class MoverMouse extends Applet{ public boolean mouseMove(Event e, int x, int y){ showStatus("Mouse en ("+x+","+y+")"); return true; } public boolean mouseDown(Event e, int x, int y){ showStatus("Se presionó el Mouse en ("+x+","+y+")"); return true; } } Arrastre del mouse Es necesario supeditar update() para que no se borre el segundo plano. import java.applet.*;//necesario para los Applets import java.awt.*; //necesario para manejo de componentes gráficos public class MoverDrag extends Applet{ int xValor, yValor; boolean primeraVez; public void init(){ primeraVez = true; } public void paint(Graphics g){ if(!primeraVez)//no dibuja la primera vez g.fillOval(xValor,yValor,4,4); } //update normalmente borra el segundo plano public void update(Graphics g){ paint(g);//no borra el segundo plano } public boolean mouseDrag(Event e, int x, int y){ xValor = x; yValor = y; primeraVez = false; repaint();//llama a repaint showStatus("Evento mouseDrag"); return true; } } Eventos del ratón con HandleEvent() import java.applet.*; import java.awt.*; public class EventRaton extends Applet{ List evento; public void init(){ evento = new List(6,false); add(evento); } public boolean handleEvent(Event e){ switch(e.id){ case Event.MOUSE_UP:evento.addItem("Ratón arriba"); return true; case Event.MOUSE_DOWN:evento.addItem("Ratón abajo"); return true; case Event.MOUSE_MOVE:evento.addItem("Ratón en movimiento"); return true; case Event.MOUSE_ENTER:evento.addItem("Ratón entra"); return true; case Event.MOUSE_EXIT:evento.addItem("Ratón sale"); return true; case Event.MOUSE_DRAG:evento.addItem("Ratón se arrastra"); return true; } showStatus("No es evento de mouse"); return true; } }