Mega Code Archive

 
Categories / Java / Swing Components
 

Gradient Panel

/*  *  soapUI, copyright (C) 2004-2009 eviware.com   *  *  soapUI is free software; you can redistribute it and/or modify it under the   *  terms of version 2.1 of the GNU Lesser General Public License as published by   *  the Free Software Foundation.  *  *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without   *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   *  See the GNU Lesser General Public License for more details at gnu.org.  */ import java.awt.BorderLayout; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.LayoutManager; import java.awt.Paint; import javax.swing.JPanel; /**  * Created by IntelliJ IDEA.  */ public class GradientPanel extends JPanel {   // ------------------------------ FIELDS ------------------------------   public final static int HORIZONTAL = 0;   public final static int VERTICAL = 1;   public final static int DIAGONAL_LEFT = 2;   public final static int DIAGONAL_RIGHT = 3;   private int direction = HORIZONTAL;   private boolean cyclic;   private int maxLength;   // --------------------------- CONSTRUCTORS ---------------------------   public GradientPanel()   {     this( HORIZONTAL );   }   public GradientPanel( int direction )   {     super( new BorderLayout() );     setOpaque( false );     this.direction = direction;   }   public GradientPanel( LayoutManager layoutManager )   {     super( layoutManager );     setOpaque( false );     this.direction = HORIZONTAL;   }   // --------------------- GETTER / SETTER METHODS ---------------------   public int getDirection()   {     return direction;   }   public void setDirection( int direction )   {     this.direction = direction;   }   public boolean isCyclic()   {     return cyclic;   }   public void setCyclic( boolean cyclic )   {     this.cyclic = cyclic;   }   public void setMaxLength( int maxLength )   {     this.maxLength = maxLength;   }   // -------------------------- OTHER METHODS --------------------------   public void paintComponent( Graphics g )   {     if( isOpaque() )     {       super.paintComponent( g );       return;     }     int width = getWidth();     int height = getHeight();     // Create the gradient paint     GradientPaint paint = null;     Color sc = getForeground();     Color ec = getBackground();     switch( direction )     {     case HORIZONTAL :     {       paint = new GradientPaint( 0, height / 2, sc, width, height / 2, ec, cyclic );       break;     }     case VERTICAL :     {       paint = new GradientPaint( width / 2, 0, sc, width / 2, maxLength > 0 ? maxLength : height, ec, cyclic );       break;     }     case DIAGONAL_LEFT :     {       paint = new GradientPaint( 0, 0, sc, width, height, ec, cyclic );       break;     }     case DIAGONAL_RIGHT :     {       paint = new GradientPaint( width, 0, sc, 0, height, ec, cyclic );       break;     }     }     if( paint == null )     {       throw new RuntimeException( "Invalid direction specified in GradientPanel" );     }     // we need to cast to Graphics2D for this operation     Graphics2D g2d = ( Graphics2D )g;     // save the old paint     Paint oldPaint = g2d.getPaint();     // set the paint to use for this operation     g2d.setPaint( paint );     // fill the background using the paint     g2d.fillRect( 0, 0, width, height );     // restore the original paint     g2d.setPaint( oldPaint );     super.paintComponent( g );   } }