Mega Code Archive

 
Categories / Java / Swing JFC
 

Color Menu

/* ** Salsa - Swing Add-On Suite ** Copyright (c) 2001, 2002 by Gerald Bauer ** ** This program is free software. ** ** You may redistribute it and/or modify it under the terms of the GNU ** General Public License as published by the Free Software Foundation. ** Version 2 of the license should be included with this distribution in ** the file LICENSE, as well as License.html. If the license is not ** included with this distribution, you may find a copy at the FSF web ** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the ** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. ** ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR ** REDISTRIBUTION OF THIS SOFTWARE. ** */ import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; public class ColorMenu extends JMenu {    Border _activeBorder;    Map _colorPanes;    Border _selectedBorder;    ColorPane _selectedColorPane;    Border _unselectedBorder;    public ColorMenu( String name )    {       super( name );       _unselectedBorder = new CompoundBorder(             new MatteBorder( 1, 1, 1, 1, getBackground() ),             new BevelBorder( BevelBorder.LOWERED, Color.WHITE, Color.GRAY ) );       _selectedBorder = new CompoundBorder(             new MatteBorder( 2, 2, 2, 2, Color.RED ),             new MatteBorder( 1, 1, 1, 1, getBackground() ) );       _activeBorder = new CompoundBorder(             new MatteBorder( 2, 2, 2, 2, Color.BLUE ),             new MatteBorder( 1, 1, 1, 1, getBackground() ) );       JPanel p = new JPanel();       p.setBorder( new EmptyBorder( 5, 5, 5, 5 ) );       p.setLayout( new GridLayout( 8, 8 ) );       _colorPanes = new HashMap();       int values[] = new int[]{0, 128, 192, 255};       for( int r = 0; r < values.length; r++ )          for( int g = 0; g < values.length; g++ )             for( int b = 0; b < values.length; b++ )             {                Color color = new Color( values[r], values[g], values[b] );                ColorPane colorPane = new ColorPane( color );                p.add( colorPane );                _colorPanes.put( color, colorPane );             }       add( p );    }    public void setColor( Color c )    {       Object obj = _colorPanes.get( c );       if( obj == null )          return;       if( _selectedColorPane != null )          _selectedColorPane.setSelected( false );       _selectedColorPane = ( ColorPane ) obj;       _selectedColorPane.setSelected( true );    }    public Color getColor()    {       if( _selectedColorPane == null )          return null;       return _selectedColorPane.getColor();    }    public void doSelection()    {       fireActionPerformed( new ActionEvent( this,             ActionEvent.ACTION_PERFORMED, getActionCommand() ) );    }    class ColorPane extends JPanel implements MouseListener    {       Color _color;       boolean _isSelected;       public ColorPane( Color color )       {          _color = color;          setBackground( color );          setBorder( _unselectedBorder );          String msg = "rgb( " + color.getRed() + ", "                 + color.getGreen() + ", "                 + color.getBlue() + " )";          setToolTipText( msg );          addMouseListener( this );       }       public void setSelected( boolean isSelected )       {          _isSelected = isSelected;          if( _isSelected )             setBorder( _selectedBorder );          else             setBorder( _unselectedBorder );       }       public Color getColor()       {          return _color;       }       public Dimension getMaximumSize()       {          return getPreferredSize();       }       public Dimension getMinimumSize()       {          return getPreferredSize();       }       public Dimension getPreferredSize()       {          return new Dimension( 15, 15 );       }       public boolean isSelected()       {          return _isSelected;       }       public void mouseClicked( MouseEvent ev ) { }       public void mouseEntered( MouseEvent ev )       {          setBorder( _activeBorder );       }       public void mouseExited( MouseEvent ev )       {          setBorder( _isSelected ? _selectedBorder : _unselectedBorder );       }       public void mousePressed( MouseEvent ev ) { }       public void mouseReleased( MouseEvent ev )       {          setColor( _color );          MenuSelectionManager.defaultManager().clearSelectedPath();          doSelection();       }    } }