1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
/* * @(#)DefaultColorSelectionModel.java 1.16 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.swing.colorchooser; import javax.swing.*; import javax.swing.event.*; import java.awt.Color; import java.io.Serializable; /** * A generic implementation of <code>ColorSelectionModel</code>. * * @version 1.16 11/17/05 * @author Steve Wilson * * @see java.awt.Color */ public class DefaultColorSelectionModel implements ColorSelectionModel, Serializable { /** * Only one <code>ChangeEvent</code> is needed per model instance * since the event's only (read-only) state is the source property. * The source of events generated here is always "this". */ protected transient ChangeEvent changeEvent = null; protected EventListenerList listenerList = new EventListenerList(); private Color selectedColor; /** * Creates a <code>DefaultColorSelectionModel</code> with the * current color set to <code>Color.white</code>. This is * the default constructor. */ public DefaultColorSelectionModel() { selectedColor = Color.white; } /** * Creates a <code>DefaultColorSelectionModel</code> with the * current color set to <code>color</code>, which should be * non-<code>null</code>. Note that setting the color to * <code>null</code> is undefined and may have unpredictable * results. * * @param color the new <code>Color</code> */ public DefaultColorSelectionModel(Color color) { selectedColor = color; } /** * Returns the selected <code>Color</code> which should be * non-<code>null</code>. * * @return the selected <code>Color</code> */ public Color getSelectedColor() { return selectedColor; } /** * Sets the selected color to <code>color</code>. * Note that setting the color to <code>null</code> * is undefined and may have unpredictable results. * This method fires a state changed event if it sets the * current color to a new non-<code>null</code> color; * if the new color is the same as the current color, * no event is fired. * * @param color the new <code>Color</code> */ public void setSelectedColor(Color color) { if (color != null && !selectedColor.equals(color)) { selectedColor = color; fireStateChanged(); } } /** * Adds a <code>ChangeListener</code> to the model. * * @param l the <code>ChangeListener</code> to be added */ public void addChangeListener(ChangeListener l) { listenerList.add(ChangeListener.class, l); } /** * Removes a <code>ChangeListener</code> from the model. * @param l the <code>ChangeListener</code> to be removed */ public void removeChangeListener(ChangeListener l) { listenerList.remove(ChangeListener.class, l); } /** * Returns an array of all the <code>ChangeListener</code>s added * to this <code>DefaultColorSelectionModel</code> with * <code>addChangeListener</code>. * * @return all of the <code>ChangeListener</code>s added, or an empty * array if no listeners have been added * @since 1.4 */ public ChangeListener[] getChangeListeners() { return (ChangeListener[])listenerList.getListeners( ChangeListener.class); } /** * Runs each <code>ChangeListener</code>'s * <code>stateChanged</code> method. * * <!-- @see #setRangeProperties //bad link--> * @see EventListenerList */ protected void fireStateChanged() { Object[] listeners = listenerList.getListenerList(); for (int i = listeners.length - 2; i >= 0; i -=2 ) { if (listeners[i] == ChangeListener.class) { if (changeEvent == null) { changeEvent = new ChangeEvent(this); } ((ChangeListener)listeners[i+1]).stateChanged(changeEvent); } } } }