Ayuda con Applet

Quisiera un poco de ayuda con un applet, el cual tiene tres Scroolbar y la idea es que cuando yo mueva cualquiera me cambie el color del fondo de un rectángulo que yo he creado dentro del mismo, la verdad ya he intentado y me compila, pero el fondo del applet me sale negro y si muevo los Scroolbar sigue negro y no cambia. A continuación pego el código que yo he hecho.
Por la ayuda que me puedas prestar mil gracias.
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.Color.*;
// <applet width="300" height="250" code="AppletColor"></applet>
public class AppletColor extends Applet implements AdjustmentListener {
Scrollbar sB1, sB2, sB3;
int bar1, bar2, bar3;
public AppletColor() {
sB1 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 255);
sB2 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 255);
sB3 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 255);
add(sB1);
add(sB2);
add(sB3);
sB1. AddAdjustmentListener(this);
sB2. AddAdjustmentListener(this);
sB3. AddAdjustmentListener(this);
}
public void paint(Graphics g) {
g.drawRect(0, 0, 500, 500);
g.fillRect(0, 0, 500, 500);
g.setColor( new Color(bar1, bar2, bar3) );
//g.setColor(Color.black);
}
public void adjustmentValueChanged(AdjustmentEvent ae) {
if(ae.getAdjustable() == sB1){
bar1 = sB1.getValue();
repaint();
}
if(ae.getAdjustable() == sB2){
bar2 = sB2.getValue();
repaint();
}
if(ae.getAdjustable() == sB3){
bar3 = sB3.getValue();
repaint();
}
}
}
Respuesta
1
No soy bueno con los applets, pero eso que haces no va a funcionar.
Color es una clase que tiene toda la pinta de ser inmutable, o si no lo es, casi. Puesto que los colores se defnien en forma de primitivos "int", las referencias se "copian", por lo que al construir el objecto Color, lo construyes con unos colores y no es posible modificarlos (observa como Color no tiene métodos para cambiarse a si mismo, no puedes cambiar el color creado).
LA forma de hacerlo es crear un nuevo Color y pasárselo al graphics. Es algo como :
...
if(ae.getAdjustable() == sB1){ 
    bar1 = sB1.getValue();
   Graphics g = getGaphics();
  g.setColor (new Color(bar1, bar2, bar3));
 repaint();
}
Ya me dieron la solución y te puede servir a ti también, es la siguiente, solo hay que cambiar de posición en el método paint el constructor del nuevo objeto color, primero se crea este objeto y después se dibuja el rectángulo y se rellena, yo lo tenia al contrario.
De igual manera te califico positivo porque te has tomado el tiempo de mirar el ejercicio y tratar de ayudarme.
Mil gracias, Perla y espero me puedas ayudar en otra ocasión.

2 respuestas más de otros expertos

Respuesta
1
Sólo hay una linea que debes de cambiar de sitio para que te funcione, es decir, en el método "paint", primero debes asignar el color que deseas y luego dibujar y rellenar el rectángulo. Te pongo el código del método "paint" tal como debe quedar:
public void paint(Graphics g) {
    g.SetColor( new Color(bar1, bar2, bar3) );
    g.drawRect(0, 0, 500, 500);
    g.fillRect(0, 0, 500, 500);
}
Mil gracias esos pequeños detalle en las instrucciones son las que a uno se le pasasn por alto y lo dejan buen rato cabeceando, pero para eso está el apoyo de los más experimentados, de nuevo gracias.
Respuesta
1
En principio no veo nada raro, prueba a hacer alguna otra acción cuando modificas las scroll, por ejemplo, que te saque una ventana con el numero de la posición, para ver si estas capturando el evento correctamente.
Otra posibilidad es que pruebes el applet en otro navegador, por si acaso
Ya me dieron la solución y te puede servir a ti también, es la siguiente, solo hay que cambiar de posición en el método paint el constructor del nuevo objeto color, primero se crea este objeto y después se dibuja el rectángulo y se rellena, yo lo tenia al contrario.
De igual manera te califico positivo porque te has tomado el tiempo de mirar el ejercicio y tratar de ayudarme.
Mil gracias, Jruben y espero me puedas ayudar en otra ocasión.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas