Java tutorial
/* ** 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(); } } }