Swing Java Tutorial

/*
 * Created on 17.12.2004
 *
 */
/*
This file is part of BORG.
    BORG is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    BORG 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 General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with BORG; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Copyright 2003 by Mike Berger
 */
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
/**
 * GUI control to easy choose foreground or background color.
 * Indicates color to be stored by its own foreground or background.
 * 
 * @author bsv
 * 
 */
public class JButtonKnowsBgColor extends JButton {
  // colorProperty is ONE color, but can be indicated by fore or back color
  protected Color colorProperty;
  // bg=true means "choosed color is background color"
  // bg=false means "choosed color is foreground color"
  protected boolean bg;
  
  public JButtonKnowsBgColor( String p_text, Color p_color, boolean p_bg ){
    setText( p_text );
    setColorProperty( p_color );
    setBg( p_bg );
    setColorByProperty();
    addActionListener(new ModalListener());
        
  }
  
  public void setColorByProperty(){
    if( isBg() ){
      setBackground( getColorProperty() );
    } else {
      setForeground( getColorProperty() );
    }
  }
  // for testing purposes only
  public static void main(String[] args) {
    JButtonKnowsBgColor jbkbc = new JButtonKnowsBgColor( "choose back", Color.RED, true );
    JButtonKnowsBgColor jbkbc1 = new JButtonKnowsBgColor( "choose fore", Color.BLUE, false );
    JFrame jf = new JFrame();
    jf.setLayout( new BorderLayout() );
    jf.getContentPane().add( jbkbc, BorderLayout.NORTH );
    jf.getContentPane().add( jbkbc1, BorderLayout.CENTER );
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize( 100, 200 );
    jf.setVisible(true);
  }
  /**
   * @return Returns the color.
   */
  public Color getColorProperty() {
    return colorProperty;
  }
  /**
   * @param color The color to set.
   */
  public void setColorProperty(Color color) {
    this.colorProperty = color;
  }
  /**
   * @return Returns the bg.
   */
  protected boolean isBg() {
    return bg;
  }
  /**
   * @param bg The bg to set.
   */
  protected void setBg(boolean bg) {
    this.bg = bg;
  }
  private class ModalListener implements ActionListener{
    public void actionPerformed(ActionEvent event){
      Color selected = JColorChooser.showDialog(
        null, 
        isBg()?"Set background":"Set foreground", 
        getColorProperty());
      setColorProperty(selected);
      setColorByProperty();
      }
   }
}