All pastes #384886 Raw Edit

Mine

public text v1 · immutable
·published 2007-03-07 12:24 UTC
rendered paste body
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;
    }
}