// Fig. 11.16: CardDeck.java
// Demonstrating CardLayout.
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class CardDeck extends Applet implements ActionListener {
   private Canvas c;
   private CardLayout cardManager;
   private Panel deck, card1, card2, card3, buttons;
   private Button b1, b2, b3, prevButton, nextButton,
                  lastButton, firstButton;

   public void init()
   {
      setLayout( new BorderLayout() );

      // create the panel with CardLayout
      deck = new Panel();
      cardManager = new CardLayout(); 
      deck.setLayout( cardManager );  

      // set up card1 and add it to Panel deck
      b1 = new Button( "card one" );
      card1 = new Panel();
      card1.add( b1 );       // add a button
      deck.add( card1, b1.getLabel() );  // add card to deck
      
      // set up card2 and add it to Panel deck
      b2 = new Button( "card two" );
      c = new Canvas();
      c.setBackground( Color.green );
      c.setSize( 80, 80 );
      card2 = new Panel();
      card2.add( b2 );       // add a button
      card2.add( c );        // add a canvas
      deck.add( card2, b2.getLabel() );  // add card to deck

      // set up card3 and add it to Panel deck
      b3 = new Button( "card three" );
      card3 = new Panel();
      card3.setLayout( new BorderLayout() );   // set layout
      card3.add( new Button( "North" ), BorderLayout.NORTH );
      card3.add( new Button( "West" ), BorderLayout.WEST );
      card3.add( new Button( "East" ), BorderLayout.EAST );
      card3.add( new Button( "Pole" ), BorderLayout.SOUTH );
      card3.add( b3, BorderLayout.CENTER );
      deck.add( card3, b3.getLabel() );  // add card to deck

      // create and layout Panel buttons that will control deck
      buttons = new Panel();
      buttons.setLayout ( new GridLayout( 2, 2 ) );
      buttons.add( firstButton = new Button( "First card" ) );
      buttons.add( nextButton = new Button( "Next card" ) );
      buttons.add( prevButton = new Button( "Previous card" ) );
      buttons.add( lastButton = new Button( "Last card" ) );
      firstButton.addActionListener( this );
      nextButton.addActionListener( this );
      prevButton.addActionListener( this );
      lastButton.addActionListener( this );

      // add Panel deck and Panel buttons to the applet 
      add( buttons, BorderLayout.WEST );
      add( deck, BorderLayout.EAST );
   }

   public void actionPerformed( ActionEvent e )
   {
      if ( e.getSource() == firstButton )    
         cardManager.first( deck );    // show first card
      else if ( e.getSource() == prevButton )    
         cardManager.previous( deck ); // show previous card
      else if ( e.getSource() == nextButton )
         cardManager.next( deck );     // show next card
      else if ( e.getSource() == lastButton )
         cardManager.last( deck );     // show last card            
   }
}
