ColorMenu.java Source code

Java tutorial

Introduction

Here is the source code for ColorMenu.java

Source

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