CODEFETCH™
            Examples
Cache of gui/cardlayout/CardLayDemo.java from
http://examples.oreilly.com/javacook2/javacooksrc2.jar
Source code below from:
Java Cookbook, Second Edition
By Ian Darwin
Published 14 June, 2004
Average rating

      Powells     Alibris


package cardlayout;

/* CardLayout Demo: Login Applet */

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

/** Switchable interface lets us call back the Applet, instead of
 * having global variables (in other languages) or passing lots of
 * extra stuff into the ImgPanel constructor
 */
interface Switchable {
    void gotoNext(String target);
}

/** ImgPanel holds an Image and optional TextField, jumps to next */
class ImgPanel extends Panel {
    /** The background Image */
    Image im;
    /* Size of the Images */
    final int WIDTH = 216;
    final int HEIGHT= 144;
    /** The container */
    Switchable applet;
    /** The label for the next panel in the series (CardLayout
     * switches based on name string, not reference to a GUI component.
     */
    String next;
    /** Our entry field */
    TextField fld = null;
    /** Our pushbutton */
    Button butt = null;

    /** Construct an ImagePanel */
    ImgPanel(Switchable theApplet, Image image, String theNextPanelName) {
        super();

        applet  = theApplet;
        im      = image;
        next    = theNextPanelName;

        if (theNextPanelName == null)
            return;

        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints cL = new GridBagConstraints(),
            cR = new GridBagConstraints();
        cL.gridx = 0; cL.gridwidth = 1;
        cR.gridx = 1; cR.gridwidth = GridBagConstraints.REMAINDER;
        cR.weightx = 1.0; cL.weightx = 4.0;
        cR.weighty = cL.weighty = 0.8;
        cR.gridheight = cL.gridheight = GridBagConstraints.REMAINDER;
        cR.anchor = GridBagConstraints.SOUTHWEST;
        cL.anchor = GridBagConstraints.SOUTHEAST;
        setLayout(gridbag);

        // Add the textfield at the left side
        fld = new TextField(8);
        gridbag.setConstraints(fld, cL);
        add(fld);

        // Add the OK button at the right side
        butt = new Button("OK");
        gridbag.setConstraints(butt, cR);
        add(butt);

        // Give it an ActionListener to move on to the next page
        butt.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (fld.getText().length() > 0)
                    applet.gotoNext(next);
            }
        });
    }

    /** Set this panel's text field to hidden echo */
    public void setNoEcho() {
        if (fld != null)
            fld.setEchoChar('*');
    }
    /* override update() to not clear, which reduces flicker */
    public void update(Graphics g) {
        paint(g);
    }

    /* Draw the background */
    public void paint(Graphics g) {
        g.drawImage(im, 0, 0, this);
    }

    /* urge the Layout Mangler to make us the same size as our background */
    public Dimension getPreferredSize() {
        return new Dimension(WIDTH, HEIGHT);
    }

    public Dimension getMinimumSize() {
        return getPreferredSize();
    }
}

/** CardLayDemo -- Prototype of a Login Dialog for an Applet
 *
 * @author Ian F. Darwin
 * @version 1.0, July, 1997
 */
public class CardLayDemo extends Applet implements Switchable {
    private ImgPanel loginP, passwdP, welcomeP; 
    CardLayout cardlay;

    /** Initialize the CardLayDemo applet. */
    public void init() {
        // Main panel (managed by CardLayout) is details
        // for either Login, Passwd or Welcome! screen.

        setLayout(cardlay = new CardLayout()); 

        /* create each Panel. */
        add("login",
            loginP = new ImgPanel(this, 
                getImage(getCodeBase(), "loginLogin.gif"), "passwd"));
        add("passwd",
            passwdP = new ImgPanel(this, 
                getImage(getCodeBase(), "loginPasswd.gif"), "welcome"));
        passwdP.setNoEcho();
        add("welcome",
            welcomeP = new ImgPanel(this, 
                getImage(getCodeBase(), "loginWelcome.gif"), null));
    }

    public void start() { 
        gotoNext("login");      // gotta start somewhere
    }

    /** Switch to the next panel */
    public void gotoNext(String gotoLabel) {
        cardlay.show(this, gotoLabel);
    }
}