= Solution
In <Scala Swing>, a `Publisher` is the observable subject and a `Reactor` supplies an observer's reactions. A reactor calls `listenTo(pounds, euros, rate)` to subscribe to the relevant publishing components. It adds a <partial function> from events to actions with `reactions += { case ... => ... }`; unmatched event types need no action. When a publisher calls `publish(e)`, subscribed reactions that handle that event are notified. Calling `deafTo` removes subscriptions that are no longer wanted.<Scala Swing event-system documentation>[README, About scala-swing: Publisher/Reactor, listenTo and reactions; archived Reactor API: deafTo]{ref}
The publisher does not need to know the concrete frame or its currency-conversion code. A `TextField` supplies the relevant editing events, and the frame's reaction distinguishes the source field using `EditDone(source)`. \b[Both registration and a matching reaction are needed]: installing a case handler without subscribing does not establish the notification path. The observer logic should update the conversion model once and then refresh the other fields from that coherent state.
Back to article page