Lightweight Example: DatePane


public class DatePane extends Container 
{ 
  DecoBox         Box = new DecoBox(); 
  DayTable        Table = new DayTable( this); 
  ActionListener  Client; 
  static String[] Months = {"Jan","Feb","Mar","Apr","May","Jun",                            
                            "Jul","Aug","Sep","Oct","Nov","Dec"};

  public DatePane ( Date d ) { 
    add( Box); 
    add( Table);
    setDate( d); 
  } 

  public void addActionListener ( ActionListener client ) { 
    Client = AWTEventMulticaster.add( Client, client); 
  } 

  public Date getDate () { 
    return Table.getDate(); 
  } 

  public void setDate ( Date dt ) { 
    String mon = Months[ dt.getMonth()] + ' ' + 
                 Integer.toString( 1900 + dt.getYear()); 
    Box.setText( mon); 
    Table.setDate( dt); 
  } 

  public void doLayout () { 
    Dimension size = getSize(); 
    Box.setBounds( 0, 0, size.width, size.height); 
    Table.setBounds( 15, 15, size.width-30, size.height-30); 
  } 

  void notifyClients () { 
    if ( Client != null ) { 
      ActionEvent e = new ActionEvent( this,
                             ActionEvent.ACTION_PERFORMED, "select"); 
      Client.actionPerformed( e); 
    } 
  } 
}