All Packages  Class Hierarchy  This Package  Previous  Next  Index

Class jcsp.awt.event.ContainerEventHandler

java.lang.Object
   |
   +----jcsp.awt.event.ContainerEventHandler

public class ContainerEventHandler
extends Object
implements CSProcess, ContainerListener

Process Diagram

   _______________________
  |                       | event
  | ContainerEventHandler |--->---
  |_______________________|
 

Description

The ContainerEventHandler class is not intended to be used by software constructors, instead it is used in the construction of new Active AWT Containers that generate ContainerEvents (i.e. ActiveContainer, ActiveFrame).

The ContainerEventHandler class implements the ContainerListener interface and can be used for and component which allows the addition of a ContainerListener. When the Container is created a new instance of the ContainerEventHandler should be created and added as a ContainerListener to the Container. The process must be set running (either asynchronously using ProcessNetwork or as part of a Parallel construct).

The main body of this process waits to be notified by a component invoking the componentAdded() or componentRemoved() methods. The process then wakes up and sends the ContainerEvent object down the event Channel. Any further calls to the methods while the process is writing will be discarded so as not to block the main Java event Thread. When another process reads from the Channel this process loops round and waits to be notified again.

Channel Protocols

Input Channels
Output Channels
event ContainerEvent The ContainerEvent generated by the Component.

Example

Extending an Existing Component

 import java.awt.*;
 import jcsp.lang.*;
 import jcsp.awt.event.*;
 public class ChannelContainer extends Container implements CSProcess {
   ContainerEventHandler handler;
   public ChannelContainer() {
   }
   public void addContainerEventChannel(ChannelOutput event) {
     if (event !=null) {
       handler = new ContainerEventHandler(event);
       addContainerListener(handler);
     }
   }
   public void run() {
     if (handler != null) {
       handler.run();
     }
   }
 }
 
NOTE: This is in fact how the jcsp awt components add Channels for other event types.

Listening to a Component

 import java.awt.*;
 import jcsp.awt.event.*;
 import jcsp.lang.*;
        :
        :
   {
     final Channel event = new One2OneChannel();
     Container c = new Panel();
     add(c);
     ContainerEventHandler handler = new ContainerEventHandler(event);
     c.addContainerListener(handler);
     new Parallel(new CSProcess[] {
       c,
       handler,
       new CSProcess() {
         public void run() {
           while (true) {
             Object o = event.read();
             System.out.println("ContainerEvent '" + o);
           }
         }
       }
     }).run();
   }
 }
 

Author:
P.D.Austin

Constructor Index

 o ContainerEventHandler(ChannelOutput)
constructs a new ContainerEventHandler with the specified event output Channel.

Method Index

 o componentAdded(ContainerEvent)
Invoked when the Container the event handler is listening to has a new Component added to it.
 o componentRemoved(ContainerEvent)
Invoked when the Container the event handler is listening to has a new Component removed from it.
 o run()
The main body of the process.

Constructors

 o ContainerEventHandler
 public ContainerEventHandler(ChannelOutput event)
constructs a new ContainerEventHandler with the specified event output Channel.

Parameters:
event - The Channel to send the event notification down

Methods

 o componentAdded
 public void componentAdded(ContainerEvent e)
Invoked when the Container the event handler is listening to has a new Component added to it. Notifies the event process that a ContainerEvent has occurred by sending the ContainerEvent Object. Some notifications will be lost so there are no guarantees that all events generated will be processed.

Parameters:
e - The parameters associated with this event
 o componentRemoved
 public void componentRemoved(ContainerEvent e)
Invoked when the Container the event handler is listening to has a new Component removed from it. Notifies the event process that a ContainerEvent has occurred by sending the ContainerEvent Object. Some notifications will be lost so there are no guarantees that all events generated will be processed.

Parameters:
e - The parameters associated with this event
 o run
 public void run()
The main body of the process. Executes the functionality described above.


All Packages  Class Hierarchy  This Package  Previous  Next  Index