001 /*
002 * Copyright 1998-2001 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.swing.colorchooser;
027
028 import javax.swing.*;
029 import javax.swing.event.*;
030 import java.awt.Color;
031 import java.io.Serializable;
032
033 /**
034 * A generic implementation of <code>ColorSelectionModel</code>.
035 *
036 * @version 1.22 05/05/07
037 * @author Steve Wilson
038 *
039 * @see java.awt.Color
040 */
041 public class DefaultColorSelectionModel implements ColorSelectionModel,
042 Serializable {
043
044 /**
045 * Only one <code>ChangeEvent</code> is needed per model instance
046 * since the event's only (read-only) state is the source property.
047 * The source of events generated here is always "this".
048 */
049 protected transient ChangeEvent changeEvent = null;
050
051 protected EventListenerList listenerList = new EventListenerList();
052
053 private Color selectedColor;
054
055 /**
056 * Creates a <code>DefaultColorSelectionModel</code> with the
057 * current color set to <code>Color.white</code>. This is
058 * the default constructor.
059 */
060 public DefaultColorSelectionModel() {
061 selectedColor = Color.white;
062 }
063
064 /**
065 * Creates a <code>DefaultColorSelectionModel</code> with the
066 * current color set to <code>color</code>, which should be
067 * non-<code>null</code>. Note that setting the color to
068 * <code>null</code> is undefined and may have unpredictable
069 * results.
070 *
071 * @param color the new <code>Color</code>
072 */
073 public DefaultColorSelectionModel(Color color) {
074 selectedColor = color;
075 }
076
077 /**
078 * Returns the selected <code>Color</code> which should be
079 * non-<code>null</code>.
080 *
081 * @return the selected <code>Color</code>
082 */
083 public Color getSelectedColor() {
084 return selectedColor;
085 }
086
087 /**
088 * Sets the selected color to <code>color</code>.
089 * Note that setting the color to <code>null</code>
090 * is undefined and may have unpredictable results.
091 * This method fires a state changed event if it sets the
092 * current color to a new non-<code>null</code> color;
093 * if the new color is the same as the current color,
094 * no event is fired.
095 *
096 * @param color the new <code>Color</code>
097 */
098 public void setSelectedColor(Color color) {
099 if (color != null && !selectedColor.equals(color)) {
100 selectedColor = color;
101 fireStateChanged();
102 }
103 }
104
105 /**
106 * Adds a <code>ChangeListener</code> to the model.
107 *
108 * @param l the <code>ChangeListener</code> to be added
109 */
110 public void addChangeListener(ChangeListener l) {
111 listenerList.add(ChangeListener.class, l);
112 }
113
114 /**
115 * Removes a <code>ChangeListener</code> from the model.
116 * @param l the <code>ChangeListener</code> to be removed
117 */
118 public void removeChangeListener(ChangeListener l) {
119 listenerList.remove(ChangeListener.class, l);
120 }
121
122 /**
123 * Returns an array of all the <code>ChangeListener</code>s added
124 * to this <code>DefaultColorSelectionModel</code> with
125 * <code>addChangeListener</code>.
126 *
127 * @return all of the <code>ChangeListener</code>s added, or an empty
128 * array if no listeners have been added
129 * @since 1.4
130 */
131 public ChangeListener[] getChangeListeners() {
132 return (ChangeListener[]) listenerList
133 .getListeners(ChangeListener.class);
134 }
135
136 /**
137 * Runs each <code>ChangeListener</code>'s
138 * <code>stateChanged</code> method.
139 *
140 * <!-- @see #setRangeProperties //bad link-->
141 * @see EventListenerList
142 */
143 protected void fireStateChanged() {
144 Object[] listeners = listenerList.getListenerList();
145 for (int i = listeners.length - 2; i >= 0; i -= 2) {
146 if (listeners[i] == ChangeListener.class) {
147 if (changeEvent == null) {
148 changeEvent = new ChangeEvent(this );
149 }
150 ((ChangeListener) listeners[i + 1])
151 .stateChanged(changeEvent);
152 }
153 }
154 }
155
156 }
|