public final class DelayedReadValueModel extends AbstractValueModel
Wraps a given subject ValueModel and observes subject value changes and forwards them to listeners of this model after a delay. If the subject value changes, a Swing Timer is used to delay the change notification. A previously started timer - if any - will be stopped before. Reading this model's value returns: a) the subject value if there's no pending update, or b) this model's old value that will be updated after the delay. If a value is set to this model, it immediately updates the subject value.
TODO: Describe how and when listeners get notified about the delayed change.
TODO: Write about the recommended delay time - above the double-click time and somewhere below a second, e.g. 100ms to 200ms.
TODO: Write about a slightly different commit handling. The current implementation defers the commit until the value is stable for the specified delay; it's a DelayUntilStableForXXXmsValueModel. Another feature is to delay for a specified time but ensure that some commits and change notifications happen. The latter is a CoalescingWriteValueModel.
TODO: Summarize the differences between the DelayedReadValueModel, the DelayedWriteValueModel, and the DelayedPropertyChangeHandler.
Timer,
Serialized FormPROPERTY_VALUE| Constructor and Description |
|---|
DelayedReadValueModel(ValueModel subject,
int delay)
Constructs a DelayedReadValueModel for the given subject ValueModel
and the specified Timer delay in milliseconds with coalescing disabled.
|
DelayedReadValueModel(ValueModel subject,
int delay,
boolean coalesce)
Constructs a DelayedReadValueModel for the given subject ValueModel
and the specified Timer delay in milliseconds using the given
coalesce mode.
|
| Modifier and Type | Method and Description |
|---|---|
int |
getDelay()
Returns the delay, in milliseconds, that is used to defer value change
notifications.
|
Object |
getValue()
Returns the subject's value or in case of a pending commit,
the pending new value.
|
boolean |
isCoalesce()
Returns if this model coalesces all pending changes or not.
|
boolean |
isPending()
Checks and answers whether this model has one or more pending changes.
|
void |
setCoalesce(boolean b)
Sets if this model shall coalesce all pending changes or not.
|
void |
setDelay(int delay)
Sets the delay, in milliseconds, that is used to defer value change
notifications.
|
void |
setValue(Object newValue)
Sets the given new value immediately as the subject's new value.
|
void |
stop()
Stops a running timer.
|
addValueChangeListener, booleanValue, doubleValue, fireValueChange, fireValueChange, fireValueChange, fireValueChange, fireValueChange, fireValueChange, fireValueChange, floatValue, getString, intValue, longValue, paramString, removeValueChangeListener, setValue, setValue, setValue, setValue, setValue, toString, valueStringcreatePropertyChangeSupport, firePropertyChangeaddPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, addVetoableChangeListener, fireIndexedPropertyChange, fireIndexedPropertyChange, fireIndexedPropertyChange, fireMultiplePropertiesChanged, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, fireVetoableChange, fireVetoableChange, fireVetoableChange, fireVetoableChange, fireVetoableChange, fireVetoableChange, getPropertyChangeListeners, getPropertyChangeListeners, getVetoableChangeListeners, getVetoableChangeListeners, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, removeVetoableChangeListenerpublic DelayedReadValueModel(ValueModel subject, int delay)
subject - the underlying (or wrapped) ValueModeldelay - the milliseconds to wait before a change
shall be committedIllegalArgumentException - if the delay is negativepublic DelayedReadValueModel(ValueModel subject, int delay, boolean coalesce)
subject - the underlying (or wrapped) ValueModeldelay - the milliseconds to wait before a change
shall be committedcoalesce - true to coalesce all pending changes,
false to fire changes with the delay when an update
has been receivedIllegalArgumentException - if the delay is negativesetCoalesce(boolean)public Object getValue()
public void setValue(Object newValue)
newValue - the value to setpublic int getDelay()
setDelay(int)public void setDelay(int delay)
delay - the delay, in milliseconds, that is used to defer
value change notificationsgetDelay()public boolean isCoalesce()
true if all pending changes will be coalesced,
false if pending changes are fired with a delay
when an update has been received.setCoalesce(boolean)public void setCoalesce(boolean b)
false, a change event will be fired
with this model's delay when an update has been received.
The default value is false.
Note that this value is not the #coalesce value of this model's internal Swing timer.
b - true to coalesce,
false to fire separate changespublic void stop()
ValueUpdateListener.public boolean isPending()
true if there are pending changes, false if not.Copyright © 2002-2015 JGoodies Software GmbH. All Rights Reserved.