rendered paste bodypackage katastrofeklient;
import java.awt.*;
public class ColorChanger extends Thread {
private Color from;
private Color to;
private Color check;
private Component component;
private double rIncrement, gIncrement, bIncrement;
private static final int animationTime = 400;
private static final int numberOfChanges = 20;
public ColorChanger(Color from, Color to, Component component) {
this.from = from;
this.to = to;
this.component = component;
component.setBackground(from);
check = from;
rIncrement = ((double)to.getRed()-(double)from.getRed())/numberOfChanges;
gIncrement = ((double)to.getGreen()-(double)from.getGreen())/numberOfChanges;
bIncrement = ((double)to.getBlue()-(double)from.getBlue())/numberOfChanges;
this.start();
}
public void run() {
boolean ok = true;
for (int i = 1; i <= numberOfChanges; i++) {
if (colorChangedByOtherThread()) {
ok = false;
break;
}
int r = (int)(from.getRed() + (rIncrement * i));
int g = (int)(from.getGreen() + (gIncrement * i));
int b = (int)(from.getBlue() + (bIncrement * i));
Color c = new Color(r, g, b);
component.setBackground(c);
check = c;
try {Thread.sleep(animationTime/numberOfChanges);}
catch (Exception e) {}
}
if (ok) {component.setBackground(to);}
}
private boolean colorChangedByOtherThread() {
Color c = component.getBackground();
if (c.getRed() != check.getRed()) return true;
if (c.getGreen() != check.getGreen()) return true;
if (c.getBlue() != check.getBlue()) return true;
return false;
}
}