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
/* * @(#)SwingPropertyChangeSupport.java 1.23 06/02/14 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.swing.event; import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeEvent; import javax.swing.SwingUtilities; /** * This subclass of {@code java.beans.PropertyChangeSupport} is almost * identical in functionality. The only difference is if constructed with * {@code SwingPropertyChangeSupport(sourceBean, true)} it ensures * listeners are only ever notified on the <i>Event Dispatch Thread</i>. * * @version 1.23 02/14/06 * @author Igor Kushnirskiy */ public final class SwingPropertyChangeSupport extends PropertyChangeSupport { /** * Constructs a SwingPropertyChangeSupport object. * * @param sourceBean The bean to be given as the source for any * events. * @throws NullPointerException if {@code sourceBean} is * {@code null} */ public SwingPropertyChangeSupport(Object sourceBean) { this(sourceBean, false); } /** * Constructs a SwingPropertyChangeSupport object. * * @param sourceBean the bean to be given as the source for any events * @param notifyOnEDT whether to notify listeners on the <i>Event * Dispatch Thread</i> only * * @throws NullPointerException if {@code sourceBean} is * {@code null} * @since 1.6 */ public SwingPropertyChangeSupport(Object sourceBean, boolean notifyOnEDT) { super(sourceBean); this.notifyOnEDT = notifyOnEDT; } /** * {@inheritDoc} * * <p> * If {@link #isNotifyOnEDT} is {@code true} and called off the * <i>Event Dispatch Thread</i> this implementation uses * {@code SwingUtilities.invokeLater} to send out the notification * on the <i>Event Dispatch Thread</i>. This ensures listeners * are only ever notified on the <i>Event Dispatch Thread</i>. * * @throws NullPointerException if {@code evt} is * {@code null} * @since 1.6 */ public void firePropertyChange(final PropertyChangeEvent evt) { if (evt == null) { throw new NullPointerException(); } if (! isNotifyOnEDT() || SwingUtilities.isEventDispatchThread()) { super.firePropertyChange(evt); } else { SwingUtilities.invokeLater( new Runnable() { public void run() { firePropertyChange(evt); } }); } } /** * Returns {@code notifyOnEDT} property. * * @return {@code notifyOnEDT} property * @see #SwingPropertyChangeSupport(Object sourceBean, boolean notifyOnEDT) * @since 1.6 */ public final boolean isNotifyOnEDT() { return notifyOnEDT; } // Serialization version ID static final long serialVersionUID = 7162625831330845068L; /** * whether to notify listeners on EDT * * @serial * @since 1.6 */ private final boolean notifyOnEDT; }