JAVA: An Introduction to Problem Solving & Programming, 8th Ed. By Walter Savitch.
ISBN 01334462033
© 2018 Pearson Education, Inc., Hoboken, NJ. All Rights Reserved

 

 

 

 

 

 

 

Listing 13.1

import javax.swing.JFrame;
import javax.swing.JLabel;
/**
A simple demonstration of a window constructed using Swing.
*/
public class FirstSwingDemo
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public static void main (String [] args)
    {
        JFrame myWindow = new JFrame ();
        myWindow.setSize (WIDTH, HEIGHT);
        JLabel myLabel =
            new JLabel ("Please dont click that button!");
        myWindow.getContentPane ().add (myLabel);
        WindowDestroyer myListener = new WindowDestroyer ();
        myWindow.addWindowListener (myListener);
        myWindow.setVisible (true);
    }
}

 

 

 

Listing 13.2

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
If you register an object of this class as a listener to any
object of the class JFrame, the object will end the program
and close the JFrame if the user clicks the JFrame's
close-window button.
*/

public class WindowDestroyer extends WindowAdapter
{
    public void windowClosing (WindowEvent e)
    {
        System.exit (0);
    }
}

 

 

Listing 13.3

import javax.swing.JFrame;
import javax.swing.JLabel;
/**
A simple window class.
*/
public class FirstWindow extends JFrame
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public FirstWindow ()
    {
        super ();
        setSize (WIDTH, HEIGHT);
        JLabel myLabel = new JLabel ("Please dont click that button!");
        getContentPane ().add (myLabel);
        WindowDestroyer listener = new WindowDestroyer ();
        addWindowListener (listener);
    }
}

 

 

 

Listing 13.4

/**
A simple demonstration of using a window class. To see
both windows, you will probably have to move the top window.
*/
public class FirstWindowDemo

    public static void main (String [] args)
    {
        FirstWindow window1 = new FirstWindow ();
        window1.setVisible (true);
        FirstWindow window2 = new FirstWindow ();
        window2.setVisible (true);
    }
}

 

 

 

Listing 13.5

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Container;
public class SecondWindow extends JFrame
{
    public static final int WIDTH = 200;
    public static final int HEIGHT = 200;
    public SecondWindow ()
    {
        super ();
        setSize (WIDTH, HEIGHT);
        Container contentPane = getContentPane ();
        JLabel label = new JLabel ("Now available in color!");
        contentPane.add (label);
        setTitle ("Second Window");                
        contentPane.setBackground (Color.BLUE);    
        addWindowListener (new WindowDestroyer ());
    }


    public SecondWindow (Color customColor)
    {
        super ();
        setSize (WIDTH, HEIGHT);
        Container contentPane = getContentPane ();
        JLabel label = new JLabel ("Now available in color!");
        contentPane.add (label);
        setTitle ("Second Window");
        contentPane.setBackground (customColor);
        addWindowListener (new WindowDestroyer ());
    }
}

 

 

 

Listing 13.6

import java.awt.Color;
public class SecondWindowDemo
{
    /**
    Creates and displays two windows of the class SecondWindow.
    */
    public static void main (String [] args)
    {
        SecondWindow window1 = new SecondWindow ();
        window1.setVisible (true);
        SecondWindow window2 = new SecondWindow (Color.PINK);
        window2.setVisible (true);
    }
}

 

 

 

Listing 13.7

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Container;
/**
Simple demonstration of the use of a layout manager
to arrange labels.
*/
public class BorderLayoutDemo extends JFrame
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public BorderLayoutDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Layout Demonstration");
        Container content = getContentPane ();
        content.setLayout (new BorderLayout ());
        JLabel label1 = new JLabel ("First label here.");
        content.add (label1, BorderLayout.NORTH);
        JLabel label2 = new JLabel ("Second label there.");
        content.add (label2, BorderLayout.SOUTH);
        JLabel label3 = new JLabel ("Third label anywhere.");
        content.add (label3, BorderLayout.CENTER);
    }


    /*
    Creates and displays a window of the class BorderLayoutDemo.
    */
    public static void main (String [] args)
    {
        BorderLayoutDemo gui = new BorderLayoutDemo ();
        gui.setVisible (true);
    }
}

 

 

 

Listing 13.8

import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
Simple demonstration of putting buttons in a JFrame.
*/
public class ButtonDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public ButtonDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Button Demo");
        Container contentPane = getContentPane ();
        contentPane.setBackground (Color.BLUE);
        contentPane.setLayout (new FlowLayout ());
        JButton stopButton = new JButton ("Red");
        stopButton.addActionListener (this);     
        contentPane.add (stopButton);            
        JButton goButton = new JButton ("Green");
        goButton.addActionListener (this);       
        contentPane.add (goButton);              
    }


    public void actionPerformed (ActionEvent e)
    {
        Container contentPane = getContentPane ();
        if (e.getActionCommand ().equals ("Red"))
            contentPane.setBackground (Color.RED);
        else if (e.getActionCommand ().equals ("Green"))
            contentPane.setBackground (Color.GREEN);
        else
            System.out.println ("Error in button interface.");
    }


    /**
    Creates and displays a window of the class ButtonDemo.
    */
    public static void main (String [] args)
    {
        ButtonDemo buttonGui = new ButtonDemo ();
        buttonGui.setVisible (true);
    }
}

 

 

 

Listing 13.9

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
Simple demonstration of putting buttons in a panel.
*/
public class PanelDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public static void main (String [] args)
    {
        PanelDemo guiWithPanel = new PanelDemo ();
        guiWithPanel.setVisible (true);
    }


    public PanelDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Panel Demonstration");
        Container contentPane = getContentPane ();
        contentPane.setBackground (Color.BLUE);
        contentPane.setLayout (new BorderLayout ());
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setBackground (Color.WHITE);
        buttonPanel.setLayout (new FlowLayout ());
        JButton stopButton = new JButton ("Red");
        stopButton.setBackground (Color.RED);
        stopButton.addActionListener (this);
        buttonPanel.add (stopButton);
        JButton goButton = new JButton ("Green");
        goButton.setBackground (Color.GREEN);
        goButton.addActionListener (this);
        buttonPanel.add (goButton);
        contentPane.add (buttonPanel, BorderLayout.SOUTH);
    }


    public void actionPerformed (ActionEvent e)
    {
        Container contentPane = getContentPane ();
        if (e.getActionCommand ().equals ("Red"))
            contentPane.setBackground (Color.RED);
        else if (e.getActionCommand ().equals ("Green"))
            contentPane.setBackground (Color.GREEN);
        else
            System.out.println ("Error in button interface.");
    }
}

 

 

 

Listing 13.10

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MemoSaver extends JFrame implements ActionListener
{
    public static final int WIDTH = 600;
    public static final int HEIGHT = 300;
    public static final int LINES = 10;
    public static final int CHAR_PER_LINE = 40;
    private JTextArea theText;
    private String memo1 = "No Memo 1.";
    private String memo2 = "No Memo 2.";
    public MemoSaver ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Memo Saver");
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setBackground (Color.WHITE);
        buttonPanel.setLayout (new FlowLayout ());
        JButton memo1Button = new JButton ("Save Memo 1");
        memo1Button.addActionListener (this);
        buttonPanel.add (memo1Button);
        JButton memo2Button = new JButton ("Save Memo 2");
        memo2Button.addActionListener (this);
        buttonPanel.add (memo2Button);
        JButton clearButton = new JButton ("Clear");
        clearButton.addActionListener (this);
        buttonPanel.add (clearButton);
        JButton get1Button = new JButton ("Get Memo 1");
        get1Button.addActionListener (this);
        buttonPanel.add (get1Button);
        JButton get2Button = new JButton ("Get Memo 2");
        get2Button.addActionListener (this);
        buttonPanel.add (get2Button);
        contentPane.add (buttonPanel, BorderLayout.SOUTH);
        JPanel textPanel = new JPanel ();
        textPanel.setBackground (Color.BLUE);            
        theText = new JTextArea (LINES, CHAR_PER_LINE);  
        theText.setBackground (Color.WHITE);             
        textPanel.add (theText);                         
        contentPane.add (textPanel, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        String actionCommand = e.getActionCommand ();
        if (actionCommand.equals ("Save Memo 1"))
            memo1 = theText.getText ();
        else if (actionCommand.equals ("Save Memo 2"))
            memo2 = theText.getText ();
        else if (actionCommand.equals ("Clear"))
            theText.setText ("");
        else if (actionCommand.equals ("Get Memo 1"))
            theText.setText (memo1);
        else if (actionCommand.equals ("Get Memo 2"))
            theText.setText (memo2);
        else
            theText.setText ("Error in memo interface");
    }


    public static void main (String [] args)
    {
        MemoSaver guiMemo = new MemoSaver ();
        guiMemo.setVisible (true);
    }
}

 

 

 

Listing 13.11

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
Class to demonstrate placing a label on a text field.
*/
public class LabelDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    private JTextField name;
    public LabelDemo ()
    {
        setTitle ("Name Tester");
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        Container content = getContentPane ();
        content.setLayout (new GridLayout (2, 1));
        JPanel namePanel = new JPanel ();
        namePanel.setLayout (new BorderLayout ());
        namePanel.setBackground (Color.LIGHT_GRAY);
        name = new JTextField (20);                             
        namePanel.add (name, BorderLayout.SOUTH);               
        JLabel nameLabel = new JLabel ("Enter your name here:");
        namePanel.add (nameLabel, BorderLayout.CENTER);         
        content.add (namePanel);                                
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setLayout (new FlowLayout ());
        JButton b = new JButton ("Test");
        b.addActionListener (this);
        buttonPanel.add (b);
        b = new JButton ("Clear");
        b.addActionListener (this);
        buttonPanel.add (b);
        content.add (buttonPanel);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Test"))
            name.setText ("A very good name!");
        else if (e.getActionCommand ().equals ("Clear"))
            name.setText ("");
        else
            name.setText ("Error in window interface.");
    }


    public static void main (String [] args)
    {
        LabelDemo w = new LabelDemo ();
        w.setVisible (true);
    }
}

 

 

 

Listing 13.12

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
GUI for totaling a series of numbers.
*/
public class Adder extends JFrame implements ActionListener
{
    public static final int WIDTH = 400;
    public static final int HEIGHT = 200;
    private JTextField inOutField;
    private double sum = 0;
    public Adder ()
    {
        setTitle ("Adding Machine");
        addWindowListener (new WindowDestroyer ());
        setSize (WIDTH, HEIGHT);
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setBackground (Color.GRAY);
        buttonPanel.setLayout (new FlowLayout ());
        JButton addButton = new JButton ("Add");
        addButton.addActionListener (this);
        buttonPanel.add (addButton);
        JButton resetButton = new JButton ("Reset");
        resetButton.addActionListener (this);
        buttonPanel.add (resetButton);
        contentPane.add (buttonPanel, BorderLayout.SOUTH);
        JPanel textPanel = new JPanel ();
        textPanel.setBackground (Color.BLUE);
        textPanel.setLayout (new FlowLayout ());
        inOutField = new JTextField ("Numbers go here.", 30);
        inOutField.setBackground (Color.WHITE);
        textPanel.add (inOutField);
        contentPane.add (textPanel, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Add"))              
        {                                                      
            sum = sum + stringToDouble (inOutField.getText ());
            inOutField.setText (Double.toString (sum));        
        }                                                      
        else if (e.getActionCommand ().equals ("Reset"))       
        {                                                      
            sum = 0;                                           
            inOutField.setText ("0.0");                        
        }                                                      
        else                                                   
            inOutField.setText ("Error in adder code.");       
    }


    private static double stringToDouble (String stringObject)
    {                                                         
        return Double.parseDouble (stringObject.trim ());     
    }                                                         


    public static void main (String [] args)
    {
        Adder guiAdder = new Adder ();
        guiAdder.setVisible (true);
    }
}

 

 

 

Listing 13.13

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
GUI for adding a series of numbers. If the user
enters a number in an incorrect format, such as
2,000 with a comma, an error message is generated
and the user can restart the computation.
*/
public class ImprovedAdder extends JFrame
    implements ActionListener
{
    public static final int WIDTH = 400;
    public static final int HEIGHT = 200;
    private JTextField inOutField;
    private double sum = 0;
    public ImprovedAdder ()
    {
        setTitle ("Adding Machine");
        addWindowListener (new WindowDestroyer ());
        setSize (WIDTH, HEIGHT);
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setBackground (Color.GRAY);
        buttonPanel.setLayout (new FlowLayout ());
        JButton addButton = new JButton ("Add");
        addButton.addActionListener (this);
        buttonPanel.add (addButton);
        JButton resetButton = new JButton ("Reset");
        resetButton.addActionListener (this);
        buttonPanel.add (resetButton);
        contentPane.add (buttonPanel, BorderLayout.SOUTH);
        JPanel textPanel = new JPanel ();
        textPanel.setBackground (Color.BLUE);
        textPanel.setLayout (new FlowLayout ());
        inOutField = new JTextField ("Numbers go here.", 30);
        inOutField.setBackground (Color.WHITE);
        textPanel.add (inOutField);
        contentPane.add (textPanel, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        try                                               
        {                                                 
            tryingCorrectNumberFormats (e);               
        }                                                 
        catch (NumberFormatException e2)                  
        {                                                 
            inOutField.setText ("Error: Reenter Number.");
        }                                                 
    }


    //This method can throw a NumberFormatException.
    public void tryingCorrectNumberFormats (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Add"))
        {
            sum = sum + stringToDouble (inOutField.getText ());
            inOutField.setText (Double.toString (sum));
        }
        else if (e.getActionCommand ().equals ("Reset"))
        {
            sum = 0;
            inOutField.setText ("0.0");
        }
        else
            inOutField.setText ("Error in adder code.");
    }


    //This method can throw a NumberFormatException.
    private static double stringToDouble (String stringObject)
    {
        return Double.parseDouble (stringObject.trim ());
    }


    public static void main (String [] args)
    {
        ImprovedAdder guiAdder = new ImprovedAdder ();
        guiAdder.setVisible (true);
    }
}

 

 

 

Listing 14.1

import javax.swing.JApplet;
import javax.swing.JLabel; 
import java.awt.Container;
import java.awt.FlowLayout;
public class HelloApplet extends JApplet
{
    public void init ()
    {
        Container contentPane = getContentPane ();
        contentPane.setLayout (new FlowLayout ());
        JLabel friendlyLabel = new JLabel ("Hello out there!");
        contentPane.add (friendlyLabel);
    }
}

 

 

 

Listing 14.2

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AdderApplet extends JApplet
    implements ActionListener
{
    private JTextField inputOutputField;
    private double sum = 0;
    public void init ()
    {
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setBackground (Color.GRAY);
        buttonPanel.setLayout (new FlowLayout ());
        JButton addButton = new JButton ("Add");
        addButton.addActionListener (this);
        buttonPanel.add (addButton);
        JButton resetButton = new JButton ("Reset");
        resetButton.addActionListener (this);
        buttonPanel.add (resetButton);
        contentPane.add (buttonPanel, BorderLayout.SOUTH);
        JPanel textPanel = new JPanel ();
        textPanel.setBackground (Color.BLUE);
        textPanel.setLayout (new FlowLayout ());
        inputOutputField =
            new JTextField ("Numbers go here.", 30);
        inputOutputField.setBackground (Color.WHITE);
        textPanel.add (inputOutputField);
        contentPane.add (textPanel, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Add"))
        {
            sum = sum +
                stringToDouble (inputOutputField.getText ());
            inputOutputField.setText (Double.toString (sum));
        }
        else if (e.getActionCommand ().equals ("Reset"))
        {
            sum = 0;
            inputOutputField.setText ("0.0");
        }
        else
            inputOutputField.setText ("Error in adder code.");
    }


    private static double stringToDouble (String stringObject)
    {
        return Double.parseDouble (stringObject.trim ());
    }
}

 

 

 

Listing 14.3

import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.BorderLayout;
import java.awt.Container;
public class DukeApplet extends JApplet
{
    public void init ()
    {
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JLabel spacer = new JLabel (" ");
        contentPane.add (spacer, "West");
        JLabel friendlyLabel = new JLabel ("Hello out there!");
        ImageIcon dukeIcon = new ImageIcon ("duke_waving.gif");
        friendlyLabel.setIcon (dukeIcon);
        contentPane.add (friendlyLabel, BorderLayout.CENTER);
    }
}

 

 

 

Listing 15.1

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MemoGUI extends JFrame implements ActionListener
{
    public static final int WIDTH = 600;
    public static final int HEIGHT = 300;
    public static final int LINES = 10;
    public static final int CHAR_PER_LINE = 40;
    private JTextArea theText;
    private String memo1 = "No Memo 1.";
    private String memo2 = "No Memo 2.";
    public MemoGUI ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Memo Saver");
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JMenu memoMenu = new JMenu ("Memos");
        JMenuItem m;                         
        m = new JMenuItem ("Save Memo 1");   
        m.addActionListener (this);          
        memoMenu.add (m);                    
        m = new JMenuItem ("Save Memo 2");
        m.addActionListener (this);
        memoMenu.add (m);
        m = new JMenuItem ("Get Memo 1");
        m.addActionListener (this);
        memoMenu.add (m);
        m = new JMenuItem ("Get Memo 2");
        m.addActionListener (this);
        memoMenu.add (m);
        m = new JMenuItem ("Clear");
        m.addActionListener (this);
        memoMenu.add (m);
        m = new JMenuItem ("Exit");
        m.addActionListener (this);
        memoMenu.add (m);
        JMenuBar mBar = new JMenuBar ();
        mBar.add (memoMenu);            
        setJMenuBar (mBar);             
        JPanel textPanel = new JPanel ();
        textPanel.setBackground (Color.BLUE);
        theText = new JTextArea (LINES, CHAR_PER_LINE);
        theText.setBackground (Color.WHITE);
        textPanel.add (theText);
        contentPane.add (textPanel, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        String actionCommand = e.getActionCommand ();
        if (actionCommand.equals ("Save Memo 1"))
            memo1 = theText.getText ();
        else if (actionCommand.equals ("Save Memo 2"))
            memo2 = theText.getText ();
        else if (actionCommand.equals ("Clear"))
            theText.setText ("");
        else if (actionCommand.equals ("Get Memo 1"))
            theText.setText (memo1);
        else if (actionCommand.equals ("Get Memo 2"))
            theText.setText (memo2);
        else if (actionCommand.equals ("Exit"))
            System.exit (0);
        else
            theText.setText ("Error in memo interface");
    }


    public static void main (String [] args)
    {
        MemoGUI gui = new MemoGUI ();
        gui.setVisible (true);
    }
}

 

 

 

Listing 15.2

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
Simple demonstration of putting icons in buttons and labels.
*/
public class IconDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 400;
    public static final int HEIGHT = 200;
    private JTextField message;
    public IconDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Icon Demonstration");
        Container content = getContentPane ();
        content.setBackground (Color.WHITE);
        content.setLayout (new BorderLayout ());
        JLabel niceLabel = new JLabel ("Nice day!");        
        ImageIcon smileyIcon = new ImageIcon ("smiley.gif");
        niceLabel.setIcon (smileyIcon);                     
        content.add (niceLabel, BorderLayout.NORTH);
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setLayout (new FlowLayout ());
        JButton helloButton = new JButton ("Hello");                 
        ImageIcon dukeWavingIcon = new ImageIcon ("duke_waving.gif");
        helloButton.setIcon (dukeWavingIcon);                        
        helloButton.addActionListener (this);
        buttonPanel.add (helloButton);
        JButton byeButton = new JButton ("Good bye");
        ImageIcon dukeStandingIcon =                 
            new ImageIcon ("duke_standing.gif");     
        byeButton.setIcon (dukeStandingIcon);        
        byeButton.addActionListener (this);
        buttonPanel.add (byeButton);
        content.add (buttonPanel, BorderLayout.SOUTH);
        message = new JTextField (30);
        content.add (message, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Hello"))
            message.setText ("Glad to meet you!");
        else if (e.getActionCommand ().equals ("Good bye"))
            message.setText (
                    "OK, click the upper right button. Ill miss you.");
        else
            System.out.println ("Error in button interface.");
    }


    /**
    Creates and displays a window of the class IconDemo.
    */
    public static void main (String [] args)
    {
        IconDemo iconGui = new IconDemo ();
        iconGui.setVisible (true);
    }
}

 

 

 

Listing 15.3

import javax.swing.JScrollPane;

//Other import statements are identical to the ones in Listing 15.1

public class ScrollBarDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 600;
    //Definitions of the constants HEIGHT, LINES, and CHAR_PER_LINE are identical
    // to those in Listing 15.1
    private JTextArea theText;
    < Definitions of instance variables memo1 and memo2 are identical to those in Listing 15.1 . >
        public ScrollBarDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Scrolling Memo Saver");
        Container contentPane = getContentPane ();

        //. . .


        JPanel textPanel = new JPanel ();
        textPanel.setBackground (Color.BLUE);
        theText = new JTextArea (LINES, CHAR_PER_LINE);
        theText.setBackground (Color.WHITE);
        JScrollPane scrolledText = new JScrollPane (theText);
        scrolledText.setHorizontalScrollBarPolicy (          
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);    
        scrolledText.setVerticalScrollBarPolicy (            
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);      
        textPanel.add (scrolledText);                        
        contentPane.add (textPanel, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        // This method is identical to the one in Listing 15.1
    }


    public static void main (String [] args)
    {
        ScrollBarDemo guiMemo = new ScrollBarDemo ();
        guiMemo.setVisible (true);
    }
}

 

 

 

Listing 15.4

import javax.swing.border.BevelBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.MatteBorder;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
Class to demonstrate adding borders to components.
*/
public class BorderDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 400;
    public static final int HEIGHT = 300;
    private JTextField name;
    public BorderDemo ()
    {
        setTitle ("Name Tester with Borders");
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        Container content = getContentPane ();
        content.setLayout (new GridLayout (2, 1));
        JPanel namePanel = new JPanel ();
        namePanel.setLayout (new BorderLayout ());
        namePanel.setBackground (Color.WHITE);
        name = new JTextField (20);
        //The following border is not as dramatic as others,
        //but look closely and you will see it.
        name.setBorder (new EtchedBorder (Color.GREEN, Color.BLUE));
        namePanel.add (name, BorderLayout.SOUTH);
        JLabel nameLabel = new JLabel ("Enter your name here:");
        //The following border inserts space around the label.
        //To see the difference, comment out the following line:
        nameLabel.setBorder (new EmptyBorder (20, 10, 0, 0));
        namePanel.add (nameLabel, BorderLayout.CENTER);
        namePanel.setBorder (new LineBorder (Color.BLACK, 10));
        content.add (namePanel);
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setLayout (new FlowLayout ());
        JButton testButton = new JButton ("Test");
        testButton.addActionListener (this);
        testButton.setBorder (new BevelBorder (BevelBorder.LOWERED));
        buttonPanel.add (testButton);
        JButton clearButton = new JButton ("Clear");
        clearButton.addActionListener (this);
        clearButton.setBorder (new BevelBorder (BevelBorder.RAISED));
        buttonPanel.add (clearButton);
        buttonPanel.setBorder (                               
                new MatteBorder (60, 40, 30, 20, Color.PINK));
        content.add (buttonPanel);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Test"))
            name.setText ("A very good name!");
        else if (e.getActionCommand ().equals ("Clear"))
            name.setText ("");
        else
            name.setText ("Error in window interface.");
    }


    public static void main (String [] args)
    {
        BorderDemo w = new BorderDemo ();
        w.setVisible (true);
    }
}

 

Listing 15.5

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
Simple demonstration of BoxLayout manager class and the use of
struts to separate components (in this case, buttons). (For an
alternative implementation, see BoxClassDemo in Listing 15.6.)
*/
public class BoxLayoutDemo extends JFrame
    implements ActionListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public static final int HORIZONTAL_STRUT_SIZE = 15;
    public static final int VERTICAL_STRUT_SIZE = 10;  
    private JPanel colorPanel;
    public BoxLayoutDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Box Demonstration");
        Container content = getContentPane ();
        content.setLayout (new BorderLayout ());
        colorPanel = new JPanel ();
        colorPanel.setBackground (Color.BLUE);
        content.add (colorPanel, BorderLayout.CENTER);
        //Horizontal buttons at bottom of frame:
        JPanel horizontalPanel = new JPanel ();
        horizontalPanel.setLayout (                                
                new BoxLayout (horizontalPanel, BoxLayout.X_AXIS));
        Component horizontalStrut =                                
            Box.createHorizontalStrut (HORIZONTAL_STRUT_SIZE);     
        horizontalPanel.add (horizontalStrut);                     
        JButton hStopButton = new JButton ("Red");
        hStopButton.addActionListener (this);
        horizontalPanel.add (hStopButton);
        Component horizontalStrut2 =                          
            Box.createHorizontalStrut (HORIZONTAL_STRUT_SIZE);
        horizontalPanel.add (horizontalStrut2);               
        JButton hGoButton = new JButton ("Green");
        hGoButton.addActionListener (this);
        horizontalPanel.add (hGoButton);
        content.add (horizontalPanel, BorderLayout.SOUTH);
        //Vertical buttons on right side of frame:
        JPanel verticalPanel = new JPanel ();
        verticalPanel.setLayout (                                
                new BoxLayout (verticalPanel, BoxLayout.Y_AXIS));
        Component verticalStrut =                                
            Box.createVerticalStrut (VERTICAL_STRUT_SIZE);       
        verticalPanel.add (verticalStrut);                       
        JButton vStopButton = new JButton ("Red");
        vStopButton.addActionListener (this);
        verticalPanel.add (vStopButton);
        Component verticalStrut2 =
            Box.createVerticalStrut (VERTICAL_STRUT_SIZE);
        verticalPanel.add (verticalStrut2);
        JButton vGoButton = new JButton ("Green");
        vGoButton.addActionListener (this);
        verticalPanel.add (vGoButton);
        content.add (verticalPanel, BorderLayout.EAST);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Red"))
            colorPanel.setBackground (Color.RED);
        else if (e.getActionCommand ().equals ("Green"))
            colorPanel.setBackground (Color.GREEN);
        else
            System.out.println ("Error in button interface.");
    }


    public static void main (String [] args)
    {
        BoxLayoutDemo gui = new BoxLayoutDemo ();
        gui.setVisible (true);
    }
}

 

 

Listing 15.6

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
Simple demonstration of the Box container class and the use of
struts to separate components (in this case, buttons). For an
alternative implementation, see BoxLayoutDemo in Listing 15.5.
*/
public class BoxClassDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public static final int HORIZONTAL_STRUT_SIZE = 15;
    public static final int VERTICAL_STRUT_SIZE = 10;
    private JPanel colorPanel;
    public BoxClassDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("Box Demonstration");
        Container content = getContentPane ();
        content.setLayout (new BorderLayout ());
        colorPanel = new JPanel ();
        colorPanel.setBackground (Color.BLUE);
        content.add (colorPanel, BorderLayout.CENTER);
        //Horizontal buttons at bottom of frame:
        Box horizontalBox = Box.createHorizontalBox ();
        Component horizontalStrut =
            Box.createHorizontalStrut (HORIZONTAL_STRUT_SIZE);
        horizontalBox.add (horizontalStrut);
        JButton hStopButton = new JButton ("Red");
        hStopButton.addActionListener (this);
        horizontalBox.add (hStopButton);
        Component horizontalStrut2 =
            Box.createHorizontalStrut (HORIZONTAL_STRUT_SIZE);
        horizontalBox.add (horizontalStrut2);
        JButton hGoButton = new JButton ("Green");
        hGoButton.addActionListener (this);
        horizontalBox.add (hGoButton);
        content.add (horizontalBox, BorderLayout.SOUTH);
        //Vertical buttons on right side of frame:
        Box verticalBox = Box.createVerticalBox ();
        Component verticalStrut =
            Box.createVerticalStrut (VERTICAL_STRUT_SIZE);
        verticalBox.add (verticalStrut);
        JButton vStopButton = new JButton ("Red");
        vStopButton.addActionListener (this);
        verticalBox.add (vStopButton);
        Component verticalStrut2 =
            Box.createVerticalStrut (VERTICAL_STRUT_SIZE);
        verticalBox.add (verticalStrut2);
        JButton vGoButton = new JButton ("Green");
        vGoButton.addActionListener (this);
        verticalBox.add (vGoButton);
        content.add (verticalBox, BorderLayout.EAST);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Red"))
            colorPanel.setBackground (Color.RED);
        else if (e.getActionCommand ().equals ("Green"))
            colorPanel.setBackground (Color.GREEN);
        else
            System.out.println ("Error in button interface.");
    }


    public static void main (String [] args)
    {
        BoxClassDemo gui = new BoxClassDemo ();
        gui.setVisible (true);
    }
}

 

 

Listing 15.7

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CardLayoutDemo extends JFrame
    implements ActionListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    private CardLayout dealer;
    private JPanel deckPanel;
    public CardLayoutDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (new WindowDestroyer ());
        setTitle ("CardLayout Demonstration");
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        deckPanel = new JPanel ();   
        dealer = new CardLayout ();  
        deckPanel.setLayout (dealer);
        JPanel startCardPanel = new JPanel ();
        startCardPanel.setLayout (new FlowLayout ());
        startCardPanel.setBackground (Color.LIGHT_GRAY);
        JLabel startLabel = new JLabel ("Hello");
        startCardPanel.add (startLabel);
        deckPanel.add ("start", startCardPanel);
        JPanel greenCardPanel = new JPanel ();
        greenCardPanel.setLayout (new FlowLayout ());
        greenCardPanel.setBackground (Color.GREEN);
        JLabel goLabel = new JLabel ("Go");
        greenCardPanel.add (goLabel);
        deckPanel.add ("green", greenCardPanel);
        JPanel redCardPanel = new JPanel ();
        redCardPanel.setLayout (new FlowLayout ());
        redCardPanel.setBackground (Color.RED);
        JLabel stopLabel = new JLabel ("Stop");
        redCardPanel.add (stopLabel);
        deckPanel.add ("red", redCardPanel);
        contentPane.add (deckPanel, BorderLayout.CENTER);
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setBackground (Color.WHITE);
        buttonPanel.setLayout (new FlowLayout ());
        JButton stopButton = new JButton ("Red");
        stopButton.addActionListener (this);
        buttonPanel.add (stopButton);
        JButton goButton = new JButton ("Green");
        goButton.addActionListener (this);
        buttonPanel.add (goButton);
        JButton resetButton = new JButton ("Reset");
        resetButton.addActionListener (this);
        buttonPanel.add (resetButton);
        contentPane.add (buttonPanel, BorderLayout.SOUTH);
        dealer.first (deckPanel); //Optional
    }


    public void actionPerformed (ActionEvent e)
    {
        String actionCommand = e.getActionCommand ();
        if (actionCommand.equals ("Red"))
            dealer.show (deckPanel, "red");
        else if (actionCommand.equals ("Green"))
            dealer.show (deckPanel, "green");
        else if (actionCommand.equals ("Reset"))
            dealer.show (deckPanel, "start");
        else
            System.out.println ("Error in CardLayout Demo.");
    }


    public static void main (String [] args)
    {
        CardLayoutDemo demoGui = new CardLayoutDemo ();
        demoGui.setVisible (true);
    }
}

 

 

Listing 15.8

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class InnerClassDemo extends JFrame
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    /**
    Creates and displays a window of the class InnerClassDemo.
    */
    public static void main (String [] args)
    {
        InnerClassDemo sampleGUI = new InnerClassDemo ();
        sampleGUI.setVisible (true);
    }


    public InnerClassDemo ()
    {
        setSize (WIDTH, HEIGHT);
        setTitle ("Inner Class Demo");
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JLabel label = new JLabel (
                "Please dont click that button!");
        contentPane.add (label, BorderLayout.CENTER);
        addWindowListener (new InnerDestroyer ());
    }


    //An inner class with the same functionality
    //as the class WindowDestroyer.
    private class InnerDestroyer extends WindowAdapter
    {
        public void windowClosing (WindowEvent e)
        {
            System.exit (0);
        }
    }                                                 
}

 

 

Listing 15.9

import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class WindowListenerDemo extends JFrame
    implements ActionListener, WindowListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public WindowListenerDemo ()
    {
        setSize (WIDTH, HEIGHT);
        addWindowListener (this);
        setTitle ("Window Listener Demonstration");
        Container content = getContentPane ();
        content.setBackground (Color.BLUE);
        content.setLayout (new FlowLayout ());
        JButton stopButton = new JButton ("Red");
        stopButton.addActionListener (this);
        content.add (stopButton);
        JButton goButton = new JButton ("Green");
        goButton.addActionListener (this);
        content.add (goButton);
    }


    public void actionPerformed (ActionEvent e)
    {
        Container content = getContentPane ();
        if (e.getActionCommand ().equals ("Red"))
            content.setBackground (Color.RED);
        else if (e.getActionCommand ().equals ("Green"))
            content.setBackground (Color.GREEN);
        else
            System.out.println ("Error in WindowListenerDemo.");
    }


    public void windowClosing (WindowEvent e)
    {                                        
        this.dispose ();                     
        System.exit (0);                     
    }                                        


    public void windowOpened (WindowEvent e)
    {  }

    public void windowClosed (WindowEvent e)
    {  }

    public void windowIconified (WindowEvent e)
    {  }

    public void windowDeiconified (WindowEvent e)
    {  }

    public void windowActivated (WindowEvent e)
    {  }

    public void windowDeactivated (WindowEvent e)
    {  }                                         

    public static void main (String [] args)
    {
        WindowListenerDemo demoWindow = new WindowListenerDemo ();
        demoWindow.setVisible (true);
    }
}

 

 

Listing 15.10

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
Demonstration of programming the close-window button.
*/
public class CloseWindowDemo extends JFrame
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    public CloseWindowDemo ()
    {
        setSize (WIDTH, HEIGHT);
        setDefaultCloseOperation (                   
                WindowConstants.DO_NOTHING_ON_CLOSE);
        addWindowListener (new InnerDestroyer ());   
        setTitle ("Close Window Demo");
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        JLabel message = new JLabel (
                "Please don't click that button.");
        contentPane.add (message, BorderLayout.CENTER);
    }


    //An inner class that is the window listener.     
    private class InnerDestroyer extends WindowAdapter
    {
        //Displays a window that checks if the user wants to exit.
        public void windowClosing (WindowEvent e)
        {
            ConfirmWindow askWindow = new ConfirmWindow ();
            askWindow.setVisible (true);
        }
    }


    //An inner class to be used with the inner class   
    //InnerDestroyer. Checks if the user wants to exit.
    private class ConfirmWindow extends JFrame         
        implements ActionListener                      
    {
        public static final int WIDTH = 200;
        public static final int HEIGHT = 100;
        public ConfirmWindow ()
        {
            setSize (WIDTH, HEIGHT);
            Container confirmContent = getContentPane ();
            confirmContent.setBackground (Color.WHITE);
            confirmContent.setLayout (new BorderLayout ());
            JLabel msgLabel = new JLabel (
                    "Are you sure you want to exit?");
            confirmContent.add (msgLabel, BorderLayout.CENTER);
            JPanel buttonPanel = new JPanel ();
            buttonPanel.setLayout (new FlowLayout ());
            JButton exitButton = new JButton ("Yes");
            exitButton.addActionListener (this);
            buttonPanel.add (exitButton);
            JButton cancelButton = new JButton ("No");
            cancelButton.addActionListener (this);
            buttonPanel.add (cancelButton);
            confirmContent.add (buttonPanel, BorderLayout.SOUTH);
        }
        public void actionPerformed (ActionEvent e)
        {
            if (e.getActionCommand ().equals ("Yes"))
                System.exit (0);
            else if (e.getActionCommand ().equals ("No"))
                dispose (); //Destroys only the ConfirmWindow.
            else
                System.out.println ("Error in Confirm Window.");
        }
    }


    public static void main (String [] args)
    {
        CloseWindowDemo gui = new CloseWindowDemo ();
        gui.setVisible (true);
    }
}

 

 

Listing 15.11

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class VisibilityDemo extends JFrame
    implements ActionListener
{
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;
    private JLabel upLabel;
    private JLabel downLabel;
    public VisibilityDemo ()
    {
        setSize (WIDTH, HEIGHT);
        setDefaultCloseOperation (
                WindowConstants.EXIT_ON_CLOSE);
        setTitle ("Visibility Demonstration");
        Container contentPane = getContentPane ();
        contentPane.setLayout (new BorderLayout ());
        contentPane.setBackground (Color.WHITE);
        upLabel = new JLabel ("Here I am up here!");
        contentPane.add (upLabel, BorderLayout.NORTH);
        upLabel.setVisible (false);
        downLabel = new JLabel ("Here I am down here!");
        contentPane.add (downLabel, BorderLayout.SOUTH);
        downLabel.setVisible (false);
        JPanel buttonPanel = new JPanel ();
        buttonPanel.setBackground (Color.WHITE);
        buttonPanel.setLayout (new FlowLayout ());
        JButton upButton = new JButton ("Up");
        upButton.addActionListener (this);
        buttonPanel.add (upButton);
        JButton downButton = new JButton ("Down");
        downButton.addActionListener (this);
        buttonPanel.add (downButton);
        contentPane.add (buttonPanel, BorderLayout.CENTER);
    }


    public void actionPerformed (ActionEvent e)
    {
        if (e.getActionCommand ().equals ("Up"))       
        {                                              
            upLabel.setVisible (true);                 
            downLabel.setVisible (false);              
            validate (); //Update graphics             
        }                                              
        else if (e.getActionCommand ().equals ("Down"))
        {                                              
            downLabel.setVisible (true);               
            upLabel.setVisible (false);                
            validate (); //Update graphics             
        }                                              
        else
            System.out.println ("Error in VisibilityDemo interface.");
    }


    public static void main (String [] args)
    {
        VisibilityDemo demoGui = new VisibilityDemo ();
        demoGui.setVisible (true);
    }
}