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;
}
}