vamos por partes dijo jack el destripador
lo primero que debes saber es que en la programacion orientada a objetos, haces eso, utilizas objetos y cada objeto tiene sus propios metodos lo que lo diferencia de la programacion estructura
ahora el applet esta bien y hace lo que tiene que hacer, lo que tu debes hacer es analizar el codigo parte por parte, debes comprender que es lo que hace:
Código java:
Ver originalpublic class applet
extends Applet { int n;
contador laCuenta;
// Constructor…
public applet () {
//se crea el objeto, el valor es 0
laCuenta = new contador();
}
g.drawString ("Contando", 20, 20);
//se obtiene y se pinta el valor del objeto = 0
g.
drawString (String.
valueOf(laCuenta.
getCuenta()),
20,
35 ); //se incrementa el valor de la cuenta = 1 y se asiga a la variable "n"
n = laCuenta.incCuenta();
//se pinta el nuevo valor = 1 que esta en la variable "n"
g.
drawString (String.
valueOf(n
),
20,
50 ); //se incrementa el valor de la cuenta = 2
laCuenta.incCuenta();
//se pinta el valor = 2
g.
drawString (String.
valueOf(laCuenta.
getCuenta()),
20,
65 ); //se incrementa y se pinta el valor = 3
g.
drawString (String.
valueOf(laCuenta.
incCuenta()),
20,
80 ); }
}
hasta aqui el objeto contador tiene el valor de 3
el metodo PAINT pinta lo que ves en el applet una y otra vez, y por tanto ejecuta todo el codigo que este dentro del PIANT una y otra vez, es por eso que al redimensionar el applet se ejecuta el codigo del objeto "cuenta", pero no desde cero, ¿porque? porque no estas creando el objeto de nuevo, sino estas utilizando el mismo objeto y como este objeto tenia el valor 3, comienza desde ahi, en el siguiente ciclo, este tendra el valor de 6,9,12, etc
si no quieres que eso suceda, lo unico que tienes que hacer es CREAR EL OBJETO DE NUEVO
el codigo queda de la siguiente forma:
Código PHP:
public class applet extends Applet {
int n;
contador laCuenta;
// Constructor…
public applet () {
}
public void paint (Graphics g) {
//se crea el objeto, el valor es 0
laCuenta = new contador();
g.drawString ("Contando", 20, 20);
//se obtiene y se pinta el valor del objeto = 0
g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 35 );
//se incrementa el valor de la cuenta = 1 y se asiga a la variable "n"
n = laCuenta.incCuenta();
//se pinta el nuevo valor = 1 que esta en la variable "n"
g.drawString (String.valueOf(n), 20, 50 );
//se incrementa el valor de la cuenta = 2
laCuenta.incCuenta();
//se pinta el valor = 2
g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 65 );
//se incrementa y se pinta el valor = 3
g.drawString (String.valueOf(laCuenta.incCuenta()), 20, 80 );
}
}
asi no importa cuantas veces redimensiones el applet, siempre pintara los valores 0,1,2,3 porque estas creando el objeto cada vez, esto claro no es lo mas eficiente, otra forma es modificar el codigo de la clase "contador" e implementr un metod que reinicie el contador a CERO
Código PHP:
public class contador {
int cnt;
public contador() {
cnt = 0;
}
public int incCuenta() {
cnt++;
return cnt;
}
public int getCuenta() {
return cnt;
}
//NUEVO METODO
public void reiniciar(){
cnt = 0;
}
}
y el applet queda
Código PHP:
public class applet extends Applet {
int n;
contador laCuenta;
// Constructor…
public applet () {
//se crea el objeto, el valor es 0
laCuenta = new contador();
}
public void paint (Graphics g) {
g.drawString ("Contando", 20, 20);
//se obtiene y se pinta el valor del objeto = 0
g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 35 );
//se incrementa el valor de la cuenta = 1 y se asiga a la variable "n"
n = laCuenta.incCuenta();
//se pinta el nuevo valor = 1 que esta en la variable "n"
g.drawString (String.valueOf(n), 20, 50 );
//se incrementa el valor de la cuenta = 2
laCuenta.incCuenta();
//se pinta el valor = 2
g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 65 );
//se incrementa y se pinta el valor = 3
g.drawString (String.valueOf(laCuenta.incCuenta()), 20, 80 );
//se reinicia el contador a CERO
laCuenta.reiniciar();
}
}
y listo
se malo, malisimo