Package org.rsg.lib.swing

Source Code of org.rsg.lib.swing.JLabelFade

package org.rsg.lib.swing;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class JLabelFade extends JLabel {
  Color start, end;
  float rint, gint, bint, rdelta, gdelta, bdelta;
  float r, g, b;
  float rstart, rend, gstart, gend, bstart, bend;
  boolean forward;
  float maxint;
  String maxstr;

  public JLabelFade(Color s, Color e, String text){
    super(text);
    start = s;
    end = e;
    setBackground(start);
    forward = true;
    Fader();
  }
  void Fader(){
    rint = fval(start.getRed(), end.getRed());
    gint = fval(start.getGreen(), end.getGreen());
    bint = fval(start.getBlue(), end.getBlue());
                                        //TODO:in the over and under methods
    maxint = Math.abs(rint); maxstr = "red"; //int and switch/case is better
    if (maxint < Math.abs(gint)){            //than using string comparison
      maxint = Math.abs(gint); maxstr = "green";
    }
    if (maxint < Math.abs(bint)){
      maxint = Math.abs(bint); maxstr = "blue";
    }
    rdelta = rint / 100.0F;
    gdelta = gint / 100.0F;
    bdelta = bint / 100.0F;
    rstart = fcolval(start.getRed());
    gstart = fcolval(start.getGreen());
    bstart = fcolval(start.getBlue());
    rend = fcolval(end.getRed());
    gend = fcolval(end.getGreen());
    bend = fcolval(end.getBlue());
    r = fcolval(start.getRed()); //set initial values
    g = fcolval(start.getGreen());
    b = fcolval(start.getBlue());
    Timer t = new Timer(15, new ActionListener(){
      public void actionPerformed(ActionEvent e){
        setBackground(new Color(r, g, b));
        if (r + g + b < 0.9){ // 1.5 or 1.0 might be better ...
          setForeground(Color.white);
        }
        else{
          setForeground(Color.black);
        }
        if (forward){
          r += rdelta;
          g += gdelta;
          b += bdelta;
          if (over(maxstr, r, g, b)){
            r = rend;
            g = gend;
            b = bend;
            forward = !forward;
          }
        }
        else{
          r -= rdelta;
          g -= gdelta;
          b -= bdelta;
          if (under(maxstr, r, g, b)){
            r = rstart;
            g = gstart;
            b = bstart;
            forward = !forward;
          }
        }
      }
    });
    t.start();
  }
  float fval(int colval0, int colval1){
    float s = (float)colval0 / 255.0F;
    float e = (float)colval1 / 255.0F;
    return e - s;
  }
  float fcolval(int cv){
    return  (float)cv / 255.0F;
  }
  boolean over(String col, float r, float g, float b){
    boolean retval;
    if (col.equals("red")){
      if (rint > 0){
        retval = r > rend;
      }
      else{
        retval = r < rend;
      }
    }
    else if (col.equals("green")){
      if (gint > 0){
        retval = g > gend;
      }
      else{
        retval = g < gend;
      }
    }
    else{
      if (bint > 0){
        retval = b > bend;
      }
      else{
        retval = b < bend;
      }
    }
    return retval;
  }
  boolean under(String col, float r, float g, float b){
    boolean retval;
    if (col.equals("red")){
      if (rint > 0){
        retval = r < rstart;
      }
      else{
        retval = r > rstart;
      }
    }
    else if (col.equals("green")){
      if (gint > 0){
        retval = g < gstart;
      }
      else{
        retval = g > gstart;
      }
    }
    else{
      if (bint > 0){
        retval = b < bstart;
      }
      else{
        retval = b > bstart;
      }
    }
    return retval;
  }
  public static void main(String[] args){
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//    FadeJButton fjb = new FadeJButton(Color.red, Color.green, "FadeButton");
    JLabelFade fjb1 = new JLabelFade(Color.yellow, Color.cyan, "FadeButton");
    JLabelFade fjb2 = new JLabelFade(Color.red, Color.black, "FadeButton");
    frame.add(fjb1, BorderLayout.NORTH);
    frame.add(fjb2, BorderLayout.SOUTH);
    frame.setBounds(0, 0, 200, 200);
    frame.setVisible(true);
  }
}
TOP

Related Classes of org.rsg.lib.swing.JLabelFade

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.