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