    001/* ========================================================================
    002 * JCommon : a free general purpose class library for the Java(tm) platform
    003 * ========================================================================
    004 *
    005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
    006 *
    007 * Project Info:  http://www.jfree.org/jcommon/index.html
    008 *
    009 * This library is free software; you can redistribute it and/or modify it
    010 * under the terms of the GNU Lesser General Public License as published by
    011 * the Free Software Foundation; either version 2.1 of the License, or
    012 * (at your option) any later version.
    013 *
    014 * This library is distributed in the hope that it will be useful, but
    015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017 * License for more details.
    018 *
    019 * You should have received a copy of the GNU Lesser General Public
    020 * License along with this library; if not, write to the Free Software
    021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022 * USA.
    023 *
    024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
    025 * in the United States and other countries.]
    026 *
    027 * -----------------
    028 * DetailEditor.java
    029 * -----------------
    030 * (C) Copyright 2004, by Thomas Morgner and Contributors.
    031 *
    032 * Original Author:  Thomas Morgner;
    033 * Contributor(s):   David Gilbert (for Object Refinery Limited);
    034 *
    035 * $Id: FloatingButtonEnabler.java,v 1.4 2007/11/02 17:50:36 taqua Exp $
    036 *
    037 * Changes
    038 * -------
    039 * 07-Jun-2004 : Added JCommon header (DG);
    040 *
    041 */
    042
    043package org.jfree.ui;
    044
    045import java.awt.event.MouseAdapter;
    046import java.awt.event.MouseEvent;
    047import javax.swing.AbstractButton;
    048
    049/**
    050 * Enables a button to have a simple floating effect. The border of the button is only visible,
    051 * when the mouse pointer is floating over the button.
    052 *
    053 * @author Thomas Morgner
    054 */
    055public final class FloatingButtonEnabler extends MouseAdapter {
    056
    057    /** A single instance. */
    058    private static FloatingButtonEnabler singleton;
    059
    060    /**
    061     * Default constructor.
    062     */
    063    private FloatingButtonEnabler() {
    064        // nothing required
    065    }
    066
    067    /**
    068     * Returns a default instance of this enabler.
    069     *
    070     * @return a shared instance of this class.
    071     */
    072    public static FloatingButtonEnabler getInstance() {
    073        if (singleton == null) {
    074            singleton = new FloatingButtonEnabler();
    075        }
    076        return singleton;
    077    }
    078
    079    /**
    080     * Adds a button to this enabler.
    081     *
    082     * @param button  the button.
    083     */
    084    public void addButton(final AbstractButton button) {
    085        button.addMouseListener(this);
    086        button.setBorderPainted(false);
    087    }
    088
    089    /**
    090     * Removes a button from the enabler.
    091     *
    092     * @param button  the button.
    093     */
    094    public void removeButton(final AbstractButton button) {
    095        button.addMouseListener(this);
    096        button.setBorderPainted(true);
    097    }
    098
    099    /**
    100     * Triggers the drawing of the border when the mouse entered the button area.
    101     *
    102     * @param e  the mouse event.
    103     */
    104    public void mouseEntered(final MouseEvent e) {
    105        if (e.getSource() instanceof AbstractButton) {
    106            final AbstractButton button = (AbstractButton) e.getSource();
    107            if (button.isEnabled()) {
    108                button.setBorderPainted(true);
    109            }
    110        }
    111    }
    112
    113    /**
    114     * Disables the drawing of the border when the mouse leaves the button area.
    115     *
    116     * @param e  the mouse event.
    117     */
    118    public void mouseExited(final MouseEvent e) {
    119        if (e.getSource() instanceof AbstractButton) {
    120            final AbstractButton button = (AbstractButton) e.getSource();
    121            button.setBorderPainted(false);
    122            if (button.getParent() != null)
    123            {
    124//                button.getParent().repaint(button.getX(), button.getY(),
    125//                    button.getWidth(), button.getHeight());
    126                button.getParent().repaint();
    127            }
    128        }
    129    }
    130
    131}