En este apartado trataremos de explicar todo lo que contiene, un código de un applet. Este applet es la solución del problema de la ‘Colección de cromos’ para una colección.
import
java.applet.Applet;
import
java.awt.*;
import
java.awt.event.*;
import
java.applet.*;
import java.util.Random;
La palabra import indica que son declaraciones que le avisan al compilador que este programa usará diferentes clases.
Por ejemplo, en el caso de java.applet.* se llaman a todas las clases que pertenecen al paquete (packages) applet.
public
class Coleccion_cromos
extends
Applet
implements ActionListener {
En esta línea se define una nueva clase, donde se especifica que es un applet, y dispone de todos los métodos de la clase applet.
private
Panel
panelPrimero,
panelSegundo,
panelSegundoPosicion1,
panelSegundoPosicion1Forma1,panelSegundoPosicion1Forma2,
panelSegundoPosicion1Forma3,panelSegundoPosicion1Forma4,
panelSegundoPosicion2,panelSegundoPosicion2Forma1,panelSegundoPosicion2Forma2,
panelTercero,
panelTerceroForma1,
panelTerceroForma2;
private
Label
labelColeccion,labelPregunta1,labelPregunta2,labelPregunta3,
labelCromos,labelCompra,labelTamañoColeccion,labelEsperanza1,labelEsperanza2,
labelContado,labelError,labelContadorPaquetes,labelCompleto,label1,
label2,label3,label4,label5,label6,label7,label8,label9,label10;
private
List
listColeccion,listNumeroCromos;
private
Button
buttonComprar;
private
TextField
textfieldContador,textfieldCromos,textfieldEsperanza,
textfieldContadorPaquetes;
private
TextArea
textareaCompra,textareaColeccion;
public
static Random
aux =
new Random
();
static
final
int
max_compra=100;
static
final
int
max_coleccion=10;
int
contadorCompra=0;
int
contadorPaquetes=0;
int
contadorColeccion=0;
int []
compra =
new
int [max_compra];
int
[]
coleccion=
new
int [max_coleccion];
En esta parte, se declaran todas las variables que se van a utilizar a nivel global. Se pueden ver todos los Panel, Label, List, Button TextField y TexArea que se utilizarán. Todas estas variables forman parte de la interfaz gráfica. El resto de variables que no son propiamente de la interfaz gráfica son utilizadas para hacer los cálculos propios del programa, y obtener la solución del problema.
A continuación se explica el contenido del método init(). Este método incluye todos los componentes que se cargarán en cuanto se ejecute el applet. No se ha incluido la totalidad del método por la densidad de código.
public
void init(){
Font fuenteGrande =
new Font(
"SeansSerif",Font.ITALIC,15 );
Font fuentePequeña=new Font (
"SeansSerif",Font.ITALIC,12 );
this.setLayout(new
GridLayout(3,1));
this.setSize(900,600);
this.setFont(fuentePequeña);
panelPrimero =this.createPanel(this);
panelPrimero.setFont(fuenteGrande);
labelPregunta1
=addLabelToPanel(panelPrimero,"Hemos comenzado una
colección de cromos que consta
de 'n' cromos diferentes.");
labelPregunta2
=addLabelToPanel(panelPrimero,"Compramos los cromos de
'k' en 'k' y el vendedor nos
asegura que la probabilidad de obtener
cada cromo de cualquier tipo es la misma.");
labelPregunta3
=addLabelToPanel(panelPrimero,"¿Cuántos cromos
esperamos comprar para completar la coleccion?");
…}
Este método está definido para incluir un evento, es decir, que se ejecutara cuando el usuario ejecute un evento, en nuestro caso es un botón. Dentro de esta función se ha creado el código que resuelve el problema y devuelve al usuario un valor. Este método se encarga el de gestionar el resto de métdos básicos, como start () y destroy ().
public
void actionPerformed(ActionEvent event) {
int i;
double
esp;
if (event.getActionCommand().equals("buttonComprar")) {
String listaColeccion=listColeccion.getSelectedItem();
int
numColeccion=Integer.valueOf(listaColeccion).intValue();
String listaNumeroCromos=listNumeroCromos.getSelectedItem();
int
numCromos=Integer.valueOf(listaNumeroCromos).intValue();
if
(numColeccion>=numCromos){
esp=esperanza(numColeccion,numCromos);
textfieldEsperanza.setText(""+esp);
if
(numColeccion==contadorColeccion){
labelCompleto.setVisible(true);
}
else{
for (i=1;i<=numCromos;i++){
compra[i-1]=aleatorio(numColeccion);
textareaCompra.append(""+compra[i-1]+",
");
contadorCompra++;
textfieldContador.setText(""+contadorCompra);
int
j=0;
while((coleccion[j]!=compra[i1])&&(j<contadorColeccion))
{j++;}
if
(coleccion[j]!=compra[i-1])
{
coleccion[j]=compra[i-1];
contadorColeccion++;
}
}
contadorPaquetes++;
textfieldContadorPaquetes.setText(""+contadorPaquetes);
ordenarVector(contadorColeccion,
coleccion);
for
(i=0; i<contadorColeccion;
i++){
if (coleccion[i]==1)label1.setForeground(Color.black);
if (coleccion[i]==2)label2.setForeground(Color.black);
if (coleccion[i]==3)label3.setForeground(Color.black);
if (coleccion[i]==4)label4.setForeground(Color.black);
if (coleccion[i]==5)label5.setForeground(Color.black);
if (coleccion[i]==6)label6.setForeground(Color.black);
if (coleccion[i]==7)label7.setForeground(Color.black);
if (coleccion[i]==8)label8.setForeground(Color.black);
if (coleccion[i]==9)label9.setForeground(Color.black);
if(coleccion[i]==10)label10.setForeground(Color.black);
}
}
}
else{
panelTerceroForma2.setVisible(true);
}
}
}
Siguiendo un diseño descendente se han incorporado, funciones y acciones auxiliares, para facilitar la programación. Pueden acceder al código de las funciones auxiliares y al resto de métodos de todos los applets en el anexo de este proyecto.
Pede acceder al código de los applets realizados:
- Jurado Popular o Juez
-Colección cromos 1
-Colección cromos 2 y
Clase canvas histo
Incluir un applet en una página HTML
Una característica de los applets es que puede ser utilizado dentro de una
página HTML. En este proyecto se han incluido todos los applets en una de
ellas.
<HTML>
<HEAD>
<TITLE>
Coleccion_cromos_1
</TITLE>
</HEAD>
<BODY>
<APPLET
CODEBASE = "."
CODE =
"Coleccion_cromos_1.class"
WIDTH = 900
HEIGHT = 600
ARCHIVE="file:/C:/…/bluejcore.jar, file:/C:…/junit.jar,
file:/C:i/Desktop/PFC/"
>
</APPLET>
</BODY>
</HTML>
Para llamar a un applet desde una
página HTML hay que utilizar la etiqueta
<APPLET>
al comienzo de la declaración
y otra al final
</APPLET>.
Dentro de la etiqueta applet el parámetro más importante es CODE que señala el nombre del archivo cuya extensión es .class, y cuyo nombre coincide con el de la clase que describe el applet.
Los valores de los parámetros WIDTH y HEIGHT determinan las dimensiones del applet. En este caso el applet tiene una anchura de 900 y una altura de 600 píxeles.
El atributo ARCHIVE se utiliza para localizar los ficheros .jar que utiliza el applet.