1 import  java.awt.BorderLayout;
  2 import  java.awt.Color;
  3 import  java.awt.Dimension;
  4 import  java.awt.FlowLayout;
  5 import  java.awt.Graphics;
  6
  7 import  javax.swing.JFrame;
  8 import  javax.swing.JLabel;
  9 import  javax.swing.JPanel;
 10
 11
 12 public   class  ColorPregressBar  extends  JLabel  {
 13      private   int  minV_  =   0 ;
 14      private   int  maxV_  =   100 ;
 15      private   int  value_  =   0 ;
 16      private   int  colorWidth_  =   0 ;
 17      private  Color frontColor_  =   new  Color( 150 150 200 );
 18      private  Color belowColor_  =  Color.lightGray;
 19      private  String endFix_  =   null ;
 20 //     private Dimension preferSize = new Dimension();
 21     ColorPregressBar()  {
 22          super ();
 23     }

 24      public  ColorPregressBar( int  minValue,  int  maxValue)  {
 25         setPreferredSize( new  Dimension( 150 20 ));
 26          if  (minValue  >=  maxValue)  {
 27              return ;
 28         }

 29         minV_  =  minValue;
 30         maxV_  =  maxValue;
 31         modifyValue();
 32     }

 33      public   void  setFrontColor(Color frontColor)  {
 34         frontColor_  =  frontColor;
 35         repaint();
 36     }

 37      public   void  setBelowColor(Color belowColor)  {
 38         belowColor_  =  belowColor;
 39         repaint();
 40     }

 41      public   void  setFix(String str)  {
 42         endFix_  =  str;
 43         repaint();
 44     }

 45      public   boolean  setMinMaxValue( int  minValue,  int  maxValue)  {
 46          if  (minValue  >=  maxValue)  {
 47              return   false ;
 48         }

 49         minV_  =  minValue;
 50         maxV_  =  maxValue;
 51         modifyValue();
 52         repaint();
 53          return   true ;
 54     }

 55      private   void  modifyValue()  {
 56          if  (value_  <  minV_)  {
 57             value_  =  minV_;
 58         }
  else   if  (value_  >  maxV_)  {
 59             value_  =  maxV_;
 60         }

 61     }

 62      protected   void  paintComponent(Graphics g)  {
 63         Color colorTemp  =  g.getColor();
 64         g.setColor(frontColor_);
 65         g.fillRect( 0 0 , colorWidth_, getPreferredSize().height);
 66         g.setColor(belowColor_);
 67         g.fillRect(colorWidth_,  0 , getPreferredSize().width  -  colorWidth_, getPreferredSize().height);
 68         g.setColor(colorTemp);
 69          super .paintComponent(g);
 70     }

 71      public   void  setValue( int  value)  {
 72          if  (value  <  minV_)  {
 73             value_  =  minV_;
 74         }
  else   if  (value  >  maxV_)  {
 75             value_  =  maxV_;
 76         }
  else   {
 77             value_  =  value;
 78         }

 79         colorWidth_  =  (getPreferredSize().width  *  (value_  -  minV_))  /  (maxV_  -  minV_);
 80         String txt  =   ""   +  value;
 81          if  (endFix_  !=   null {
 82             txt  +=  endFix_;
 83         }

 84         setText(txt);
 85     }

 86     
 87      public   static   void  main(String[] args)  {
 88         JFrame f  =   new  JFrame();
 89         f.setSize( 400 300 );
 90         ColorPregressBar progress  =   new  ColorPregressBar( - 20 100 );
 91         progress.setFix( " [db] " );
 92         progress.setValue( 50 );
 93         JPanel panel  =   new  JPanel();
 94         panel.setLayout( new  FlowLayout());
 95         panel.add(progress);
 96         f.getContentPane().add(panel, BorderLayout.CENTER);
 97         f.show();
 98         f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 99
100     }

101 }

102