java.awt
Class AWTEventMulticaster
java.lang.Object
|
+--java.awt.AWTEventMulticaster
All Implemented Interfaces:
ComponentListener, ContainerListener, FocusListener, KeyListener, MouseListener, MouseMotionListener, WindowListener, WindowFocusListener, WindowStateListener, ActionListener, ItemListener, AdjustmentListener, TextListener, InputMethodListener, HierarchyListener, HierarchyBoundsListener, MouseWheelListener
public class
AWTEventMulticasterextends
Objectimplements
ComponentListener,
ContainerListener,
FocusListener,
KeyListener,
MouseListener,
MouseMotionListener,
WindowListener,
WindowFocusListener,
WindowStateListener,
ActionListener,
ItemListener,
AdjustmentListener,
TextListener,
InputMethodListener,
HierarchyListener,
HierarchyBoundsListener,
MouseWheelListener This class is used to implement a chain of event handlers. Dispatching
using this class is thread safe. Here is a quick example of how to
add and delete listeners using this class. For this example, we will
assume are firing
AdjustmentEvent
's. However, this
same approach is useful for all events in the
java.awt.event
package, and more if this class is subclassed.
AdjustmentListener al;
public void addAdjustmentListener(AdjustmentListener listener)
{
al = AWTEventMulticaster.add(al, listener);
}
public void removeAdjustmentListener(AdjustmentListener listener)
{
al = AWTEventMulticaster.remove(al, listener);
}
When it come time to process an event, simply call al
,
assuming it is not null
, and all listeners in the chain will
be fired.
The first time add
is called it is passed
null
and listener
as its arguments. This
starts building the chain. This class returns listener
which becomes the new al
. The next time, add
is called with al
and listener
and the
new listener is then chained to the old.
Since:Authors:- Bryce McKinlay
- Aaron M. Renn <arenn@urbanophile.com>
- Eric Blake <ebb9@email.byu.edu>
void | actionPerformed(java.awt.event.ActionEvent e)
|
static java.awt.event.ComponentListener | add(java.awt.event.ComponentListener a, java.awt.event.ComponentListener b)
|
static java.awt.event.ContainerListener | add(java.awt.event.ContainerListener a, java.awt.event.ContainerListener b)
|
static java.awt.event.FocusListener | add(java.awt.event.FocusListener a, java.awt.event.FocusListener b)
|
static java.awt.event.KeyListener | add(java.awt.event.KeyListener a, java.awt.event.KeyListener b)
|
static java.awt.event.MouseListener | add(java.awt.event.MouseListener a, java.awt.event.MouseListener b)
|
static java.awt.event.MouseMotionListener | add(java.awt.event.MouseMotionListener a, java.awt.event.MouseMotionListener b)
|
static java.awt.event.WindowListener | add(java.awt.event.WindowListener a, java.awt.event.WindowListener b)
|
static java.awt.event.WindowStateListener | add(java.awt.event.WindowStateListener a, java.awt.event.WindowStateListener b)
|
static java.awt.event.WindowFocusListener | add(java.awt.event.WindowFocusListener a, java.awt.event.WindowFocusListener b)
|
static java.awt.event.ActionListener | add(java.awt.event.ActionListener a, java.awt.event.ActionListener b)
|
static java.awt.event.ItemListener | add(java.awt.event.ItemListener a, java.awt.event.ItemListener b)
|
static java.awt.event.AdjustmentListener | add(java.awt.event.AdjustmentListener a, java.awt.event.AdjustmentListener b)
|
static java.awt.event.TextListener | add(java.awt.event.TextListener a, java.awt.event.TextListener b)
|
static java.awt.event.InputMethodListener | add(java.awt.event.InputMethodListener a, java.awt.event.InputMethodListener b)
|
static java.awt.event.HierarchyListener | add(java.awt.event.HierarchyListener a, java.awt.event.HierarchyListener b)
|
static java.awt.event.HierarchyBoundsListener | add(java.awt.event.HierarchyBoundsListener a, java.awt.event.HierarchyBoundsListener b)
|
static java.awt.event.MouseWheelListener | add(java.awt.event.MouseWheelListener a, java.awt.event.MouseWheelListener b)
|
static java.util.EventListener | addInternal(java.util.EventListener a, java.util.EventListener b)
|
void | adjustmentValueChanged(java.awt.event.AdjustmentEvent e)
|
void | ancestorMoved(java.awt.event.HierarchyEvent e)
|
void | ancestorResized(java.awt.event.HierarchyEvent e)
|
void | caretPositionChanged(java.awt.event.InputMethodEvent e)
|
void | componentAdded(java.awt.event.ContainerEvent e)
|
void | componentHidden(java.awt.event.ComponentEvent e)
|
void | componentMoved(java.awt.event.ComponentEvent e)
|
void | componentRemoved(java.awt.event.ContainerEvent e)
|
void | componentResized(java.awt.event.ComponentEvent e)
|
void | componentShown(java.awt.event.ComponentEvent e)
|
void | focusGained(java.awt.event.FocusEvent e)
|
void | focusLost(java.awt.event.FocusEvent e)
|
static java.util.EventListener[] | getListeners(java.util.EventListener l, java.lang.Class type)
|
void | hierarchyChanged(java.awt.event.HierarchyEvent e)
|
void | inputMethodTextChanged(java.awt.event.InputMethodEvent e)
|
void | itemStateChanged(java.awt.event.ItemEvent e)
|
void | keyPressed(java.awt.event.KeyEvent e)
|
void | keyReleased(java.awt.event.KeyEvent e)
|
void | keyTyped(java.awt.event.KeyEvent e)
|
void | mouseClicked(java.awt.event.MouseEvent e)
|
void | mouseDragged(java.awt.event.MouseEvent e)
|
void | mouseEntered(java.awt.event.MouseEvent e)
|
void | mouseExited(java.awt.event.MouseEvent e)
|
void | mouseMoved(java.awt.event.MouseEvent e)
|
void | mousePressed(java.awt.event.MouseEvent e)
|
void | mouseReleased(java.awt.event.MouseEvent e)
|
void | mouseWheelMoved(java.awt.event.MouseWheelEvent e)
|
java.util.EventListener | remove(java.util.EventListener oldl)
|
static java.awt.event.ComponentListener | remove(java.awt.event.ComponentListener l, java.awt.event.ComponentListener oldl)
|
static java.awt.event.ContainerListener | remove(java.awt.event.ContainerListener l, java.awt.event.ContainerListener oldl)
|
static java.awt.event.FocusListener | remove(java.awt.event.FocusListener l, java.awt.event.FocusListener oldl)
|
static java.awt.event.KeyListener | remove(java.awt.event.KeyListener l, java.awt.event.KeyListener oldl)
|
static java.awt.event.MouseListener | remove(java.awt.event.MouseListener l, java.awt.event.MouseListener oldl)
|
static java.awt.event.MouseMotionListener | remove(java.awt.event.MouseMotionListener l, java.awt.event.MouseMotionListener oldl)
|
static java.awt.event.WindowListener | remove(java.awt.event.WindowListener l, java.awt.event.WindowListener oldl)
|
static java.awt.event.WindowStateListener | remove(java.awt.event.WindowStateListener l, java.awt.event.WindowStateListener oldl)
|
static java.awt.event.WindowFocusListener | remove(java.awt.event.WindowFocusListener l, java.awt.event.WindowFocusListener oldl)
|
static java.awt.event.ActionListener | remove(java.awt.event.ActionListener l, java.awt.event.ActionListener oldl)
|
static java.awt.event.ItemListener | remove(java.awt.event.ItemListener l, java.awt.event.ItemListener oldl)
|
static java.awt.event.AdjustmentListener | remove(java.awt.event.AdjustmentListener l, java.awt.event.AdjustmentListener oldl)
|
static java.awt.event.TextListener | remove(java.awt.event.TextListener l, java.awt.event.TextListener oldl)
|
static java.awt.event.InputMethodListener | remove(java.awt.event.InputMethodListener l, java.awt.event.InputMethodListener oldl)
|
static java.awt.event.HierarchyListener | remove(java.awt.event.HierarchyListener l, java.awt.event.HierarchyListener oldl)
|
static java.awt.event.HierarchyBoundsListener | remove(java.awt.event.HierarchyBoundsListener l, java.awt.event.HierarchyBoundsListener oldl)
|
static java.awt.event.MouseWheelListener | remove(java.awt.event.MouseWheelListener l, java.awt.event.MouseWheelListener oldl)
|
static java.util.EventListener | removeInternal(java.util.EventListener l, java.util.EventListener oldl)
|
static void | save(java.io.ObjectOutputStream s, java.lang.String k, java.util.EventListener l)
|
void | saveInternal(java.io.ObjectOutputStream s, java.lang.String k)
|
void | textValueChanged(java.awt.event.TextEvent e)
|
void | windowActivated(java.awt.event.WindowEvent e)
|
void | windowClosed(java.awt.event.WindowEvent e)
|
void | windowClosing(java.awt.event.WindowEvent e)
|
void | windowDeactivated(java.awt.event.WindowEvent e)
|
void | windowDeiconified(java.awt.event.WindowEvent e)
|
void | windowGainedFocus(java.awt.event.WindowEvent e)
|
void | windowIconified(java.awt.event.WindowEvent e)
|
void | windowLostFocus(java.awt.event.WindowEvent e)
|
void | windowOpened(java.awt.event.WindowEvent e)
|
void | windowStateChanged(java.awt.event.WindowEvent e)
|
a
protected final EventListener a
A variable in the event chain.
b
protected final EventListener b
A variable in the event chain.
AWTEventMulticaster
protected AWTEventMulticaster(java.util.EventListener a, java.util.EventListener b)
Initializes a new instance of AWTEventMulticaster
with
the specified event listener parameters. The parameters should not be
null, although it is not required to enforce this with a
NullPointerException.
Parameters:
actionPerformed
public void actionPerformed(java.awt.event.ActionEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
add
public static ActionListener add(java.awt.event.ActionListener a, java.awt.event.ActionListener b)
Chain ActionListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static AdjustmentListener add(java.awt.event.AdjustmentListener a, java.awt.event.AdjustmentListener b)
Chain AdjustmentListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static ComponentListener add(java.awt.event.ComponentListener a, java.awt.event.ComponentListener b)
Chain ComponentListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static ContainerListener add(java.awt.event.ContainerListener a, java.awt.event.ContainerListener b)
Chain ContainerListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static FocusListener add(java.awt.event.FocusListener a, java.awt.event.FocusListener b)
Chain FocusListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static HierarchyBoundsListener add(java.awt.event.HierarchyBoundsListener a, java.awt.event.HierarchyBoundsListener b)
Chain HierarchyBoundsListener
a and b.
Since:Parameters:
Returns:
- latest entry in the chain
add
public static HierarchyListener add(java.awt.event.HierarchyListener a, java.awt.event.HierarchyListener b)
Chain HierarchyListener
a and b.
Since:Parameters:
Returns:
- latest entry in the chain
add
public static InputMethodListener add(java.awt.event.InputMethodListener a, java.awt.event.InputMethodListener b)
Chain InputMethodListener
a and b.
Since:Parameters:
Returns:
- latest entry in the chain
add
public static ItemListener add(java.awt.event.ItemListener a, java.awt.event.ItemListener b)
Chain ItemListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static KeyListener add(java.awt.event.KeyListener a, java.awt.event.KeyListener b)
Chain KeyListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static MouseListener add(java.awt.event.MouseListener a, java.awt.event.MouseListener b)
Chain MouseListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static MouseMotionListener add(java.awt.event.MouseMotionListener a, java.awt.event.MouseMotionListener b)
Chain MouseMotionListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static MouseWheelListener add(java.awt.event.MouseWheelListener a, java.awt.event.MouseWheelListener b)
Chain MouseWheelListener
a and b.
Since:Parameters:
Returns:
- latest entry in the chain
add
public static TextListener add(java.awt.event.TextListener a, java.awt.event.TextListener b)
Chain AdjustmentListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static WindowFocusListener add(java.awt.event.WindowFocusListener a, java.awt.event.WindowFocusListener b)
Chain WindowFocusListener
a and b.
Since:Parameters:
Returns:
- latest entry in the chain
add
public static WindowListener add(java.awt.event.WindowListener a, java.awt.event.WindowListener b)
Chain WindowListener
a and b.
Parameters:
Returns:
- latest entry in the chain
add
public static WindowStateListener add(java.awt.event.WindowStateListener a, java.awt.event.WindowStateListener b)
Chain WindowStateListener
a and b.
Since:Parameters:
Returns:
- latest entry in the chain
addInternal
protected static EventListener addInternal(java.util.EventListener a, java.util.EventListener b)
Chain EventListener
a and b.
Parameters:
Returns:
- latest entry in the chain
adjustmentValueChanged
public void adjustmentValueChanged(java.awt.event.AdjustmentEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
ancestorMoved
public void ancestorMoved(java.awt.event.HierarchyEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
ancestorResized
public void ancestorResized(java.awt.event.HierarchyEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
caretPositionChanged
public void caretPositionChanged(java.awt.event.InputMethodEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
componentAdded
public void componentAdded(java.awt.event.ContainerEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
componentHidden
public void componentHidden(java.awt.event.ComponentEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
componentMoved
public void componentMoved(java.awt.event.ComponentEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
componentRemoved
public void componentRemoved(java.awt.event.ContainerEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
componentResized
public void componentResized(java.awt.event.ComponentEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
componentShown
public void componentShown(java.awt.event.ComponentEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
focusGained
public void focusGained(java.awt.event.FocusEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
focusLost
public void focusLost(java.awt.event.FocusEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
getListeners
public static EventListener[] getListeners(java.util.EventListener l, java.lang.Class type)
Returns an array of all chained listeners of the specified type in the
given chain. A null listener returns an empty array, and a listener
which is not an AWTEventMulticaster returns an array of one element. If
no listeners in the chain are of the specified type, an empty array is
returned.
Since:Parameters:
Returns:
- an array of the listeners of that type in the chain
Throws:
hierarchyChanged
public void hierarchyChanged(java.awt.event.HierarchyEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
inputMethodTextChanged
public void inputMethodTextChanged(java.awt.event.InputMethodEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
itemStateChanged
public void itemStateChanged(java.awt.event.ItemEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
keyPressed
public void keyPressed(java.awt.event.KeyEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
keyReleased
public void keyReleased(java.awt.event.KeyEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
keyTyped
public void keyTyped(java.awt.event.KeyEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mouseClicked
public void mouseClicked(java.awt.event.MouseEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mouseDragged
public void mouseDragged(java.awt.event.MouseEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mouseEntered
public void mouseEntered(java.awt.event.MouseEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mouseExited
public void mouseExited(java.awt.event.MouseEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mouseMoved
public void mouseMoved(java.awt.event.MouseEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mousePressed
public void mousePressed(java.awt.event.MouseEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mouseReleased
public void mouseReleased(java.awt.event.MouseEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
mouseWheelMoved
public void mouseWheelMoved(java.awt.event.MouseWheelEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
remove
public static ActionListener remove(java.awt.event.ActionListener l, java.awt.event.ActionListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static AdjustmentListener remove(java.awt.event.AdjustmentListener l, java.awt.event.AdjustmentListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static ComponentListener remove(java.awt.event.ComponentListener l, java.awt.event.ComponentListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static ContainerListener remove(java.awt.event.ContainerListener l, java.awt.event.ContainerListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static FocusListener remove(java.awt.event.FocusListener l, java.awt.event.FocusListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static HierarchyBoundsListener remove(java.awt.event.HierarchyBoundsListener l, java.awt.event.HierarchyBoundsListener oldl)
Removes the listener oldl
from the listener l
.
Since:Parameters:
Returns:
- the resulting listener chain
remove
public static HierarchyListener remove(java.awt.event.HierarchyListener l, java.awt.event.HierarchyListener oldl)
Removes the listener oldl
from the listener l
.
Since:Parameters:
Returns:
- the resulting listener chain
remove
public static InputMethodListener remove(java.awt.event.InputMethodListener l, java.awt.event.InputMethodListener oldl)
Removes the listener oldl
from the listener l
.
Since:Parameters:
Returns:
- the resulting listener chain
remove
public static ItemListener remove(java.awt.event.ItemListener l, java.awt.event.ItemListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static KeyListener remove(java.awt.event.KeyListener l, java.awt.event.KeyListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static MouseListener remove(java.awt.event.MouseListener l, java.awt.event.MouseListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static MouseMotionListener remove(java.awt.event.MouseMotionListener l, java.awt.event.MouseMotionListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static MouseWheelListener remove(java.awt.event.MouseWheelListener l, java.awt.event.MouseWheelListener oldl)
Removes the listener oldl
from the listener l
.
Since:Parameters:
Returns:
- the resulting listener chain
remove
public static TextListener remove(java.awt.event.TextListener l, java.awt.event.TextListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static WindowFocusListener remove(java.awt.event.WindowFocusListener l, java.awt.event.WindowFocusListener oldl)
Removes the listener oldl
from the listener l
.
Since:Parameters:
Returns:
- the resulting listener chain
remove
public static WindowListener remove(java.awt.event.WindowListener l, java.awt.event.WindowListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
remove
public static WindowStateListener remove(java.awt.event.WindowStateListener l, java.awt.event.WindowStateListener oldl)
Removes the listener oldl
from the listener l
.
Since:Parameters:
Returns:
- the resulting listener chain
remove
protected EventListener remove(java.util.EventListener oldl)
Removes one instance of the specified listener from this multicaster
chain. This descends recursively if either child is a multicaster, and
returns a multicaster chain with the old listener removed.
Parameters:
Returns:
- the resulting multicaster with the specified listener removed
removeInternal
protected static EventListener removeInternal(java.util.EventListener l, java.util.EventListener oldl)
Removes the listener oldl
from the listener l
.
Parameters:
Returns:
- the resulting listener chain
save
protected static void save(java.io.ObjectOutputStream s, java.lang.String k, java.util.EventListener l)
Saves a Serializable listener chain to a serialization stream.
Parameters:
Throws:
saveInternal
protected void saveInternal(java.io.ObjectOutputStream s, java.lang.String k)
Saves all Serializable listeners to a serialization stream.
Parameters:
Throws:
textValueChanged
public void textValueChanged(java.awt.event.TextEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowActivated
public void windowActivated(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowClosed
public void windowClosed(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowClosing
public void windowClosing(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowDeactivated
public void windowDeactivated(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowDeiconified
public void windowDeiconified(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowGainedFocus
public void windowGainedFocus(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
windowIconified
public void windowIconified(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowLostFocus
public void windowLostFocus(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
windowOpened
public void windowOpened(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Parameters:
windowStateChanged
public void windowStateChanged(java.awt.event.WindowEvent e)
Handles this event by dispatching it to the "a" and "b" listener
instances.
Since:Parameters:
AdjustmentEvent
's. However, this same approach is useful for all events in thejava.awt.event
package, and more if this class is subclassed.AdjustmentListener al; public void addAdjustmentListener(AdjustmentListener listener) { al = AWTEventMulticaster.add(al, listener); } public void removeAdjustmentListener(AdjustmentListener listener) { al = AWTEventMulticaster.remove(al, listener); }
When it come time to process an event, simply call
al
, assuming it is notnull
, and all listeners in the chain will be fired.The first time
add
is called it is passednull
andlistener
as its arguments. This starts building the chain. This class returnslistener
which becomes the newal
. The next time,add
is called withal
andlistener
and the new listener is then chained to the old.