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     * Spinner.java
029     * ------------
030     * (C) Copyright 2002-2004, by Object Refinery Limited.
031     *
032     * Original Author:  David Gilbert (for Object Refinery Limited);
033     * Contributor(s):   -;
034     *
035     * $Id $
036     *
037     * Changes
038     * -------
039     * 14-Oct-2002 : Version 1 (DG);
040     *
041     */
042    
043    package org.jfree.ui;
044    
045    import java.awt.BorderLayout;
046    import java.awt.GridLayout;
047    import java.awt.event.MouseEvent;
048    import java.awt.event.MouseListener;
049    
050    import javax.swing.JPanel;
051    import javax.swing.JTextField;
052    import javax.swing.SwingConstants;
053    
054    /**
055     * A very basic spinner component, used for demo purposes only.
056     *
057     * @author David Gilbert
058     */
059    public class Spinner extends JPanel implements MouseListener {
060    
061        /** The current value. */
062        private int value;
063    
064        /** The text field displaying the value. */
065        private JTextField textField;
066    
067        /** The arrow button panel. */
068        private JPanel buttonPanel;
069    
070        /** The up button. */
071        private ArrowPanel upButton;
072    
073        /** The down button. */
074        private ArrowPanel downButton;
075    
076        /**
077         * Creates a new spinner.
078         *
079         * @param value  the initial value.
080         */
081        public Spinner(final int value) {
082            super(new BorderLayout());
083            this.value = value;
084            this.textField = new JTextField(Integer.toString(this.value));
085            this.textField.setHorizontalAlignment(SwingConstants.RIGHT);
086            add(this.textField);
087            this.buttonPanel = new JPanel(new GridLayout(2, 1, 0, 1));
088            this.upButton = new ArrowPanel(ArrowPanel.UP);
089            this.upButton.addMouseListener(this);
090            this.downButton = new ArrowPanel(ArrowPanel.DOWN);
091            this.downButton.addMouseListener(this);
092            this.buttonPanel.add(this.upButton);
093            this.buttonPanel.add(this.downButton);
094            add(this.buttonPanel, BorderLayout.EAST);
095        }
096    
097        /**
098         * Returns the current value.
099         *
100         * @return the current value.
101         */
102        public int getValue() {
103            return this.value;
104        }
105    
106        /**
107         * Receives notification of mouse clicks.
108         *
109         * @param e  the mouse event.
110         */
111        public void mouseClicked(final MouseEvent e) {
112            if (e.getSource() == this.upButton) {
113                this.value++;
114                this.textField.setText(Integer.toString(this.value));
115                firePropertyChange("value", this.value - 1, this.value);
116            }
117            else if (e.getSource() == this.downButton) {
118                this.value--;
119                this.textField.setText(Integer.toString(this.value));
120                firePropertyChange("value", this.value + 1, this.value);
121            }
122        }
123    
124        /**
125         * Receives notification of mouse events.
126         *
127         * @param e  the mouse event.
128         */
129        public void mouseEntered(final MouseEvent e) {
130            // ignored
131        }
132    
133        /**
134         * Receives notification of mouse events.
135         *
136         * @param e  the mouse event.
137         */
138        public void mouseExited(final MouseEvent e) {
139            // ignored
140        }
141    
142        /**
143         * Receives notification of mouse events.
144         *
145         * @param e  the mouse event.
146         */
147        public void mousePressed(final MouseEvent e) {
148            // ignored
149        }
150    
151        /**
152         * Receives notification of mouse events.
153         *
154         * @param e  the mouse event.
155         */
156        public void mouseReleased(final MouseEvent e) {
157            // ignored
158        }
159    
160    }