/*
   Chapter 8:     Hands On BillPayer
   Programmer:   Brad Shedd
   Date:      September 1, 2006
   Program Name:  BillPayer.java
*/

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.util.*;

public class BillPayer extends JFrame implements ActionListener
{
  
//Declare output stream
   DataOutputStream output;

  
//Construct a panel for each row
   JPanel firstRow = new JPanel();
   JPanel secondRow =
new JPanel();
   JPanel thirdRow =
new JPanel();
   JPanel fourthRow =
new JPanel();
   JPanel fifthRow =
new JPanel();
   JPanel sixthRow =
new JPanel();
   JPanel seventhRow =
new JPanel();
   JPanel eighthRow =
new JPanel();

  
//Construct a panel for the fields and buttons
   JPanel fieldPanel = new JPanel();
   JPanel buttonPanel =
new JPanel();

  
//Construct Labels and text boxes
   JLabel acctNumLabel = new JLabel("Account Number:                   ");
      JTextField acctNum =
new JTextField(15);
   JLabel pmtLabel =
new JLabel("Payment Amount:");
      JTextField pmt =
new JTextField(10);
   JLabel firstNameLabel =
new JLabel("First Name:                   ");
      JTextField firstName =
new JTextField(10);
   JLabel lastNameLabel =
new JLabel("Last Name:                    ");
      JTextField lastName =
new JTextField(20);
   JLabel addressLabel =
new JLabel("Address:");
      JTextField address =
new JTextField(35);
   JLabel cityLabel =
new JLabel("City:                  ");
      JTextField city =
new JTextField(10);
   JLabel stateLabel =
new JLabel("State:");
      JTextField state =
new JTextField(2);
   JLabel zipLabel =
new JLabel("Zip:");
      JTextField zip =
new JTextField(9);

  
//Construct button
   JButton submitButton = new JButton("submit");

  
public static void main(String[] args)
   {
     
//set the look and feel of the interface
      try
      {
         UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.motif.MotifLookandFeel");

      }
     
catch(Exception e)
      {
         JOptionPane.showMessageDialog(
null,
        
"The UIManager could not set the Look and Feel for this application.","Error",
         JOptionPane.INFORMATION_MESSAGE);
      }

      BillPayer f =
new BillPayer();
      f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      f.setSize(450,300);
      f.setTitle(
"Shedd Power and Light Customer Payments");
      f.setResizable(
false);
      f.setLocation(200,200);
      f.setVisible(
true);
   }

  
public BillPayer()
   {
      Container c = getContentPane();
      c.setLayout((
new BorderLayout()));
      fieldPanel.setLayout(
new GridLayout(8,1));
      FlowLayout rowSetup =
new FlowLayout(FlowLayout.LEFT,5,3);
         firstRow.setLayout(rowSetup);
         secondRow.setLayout(rowSetup);
         thirdRow.setLayout(rowSetup);
         fourthRow.setLayout(rowSetup);
         fifthRow.setLayout(rowSetup);
         sixthRow.setLayout(rowSetup);
         seventhRow.setLayout(rowSetup);
         eighthRow.setLayout(rowSetup);
      buttonPanel.setLayout(
new FlowLayout(FlowLayout.CENTER));

  
//Add fields to rows
   firstRow.add(acctNumLabel);
   firstRow.add(pmtLabel);

   secondRow.add(acctNum);
   secondRow.add(pmt);

   thirdRow.add(firstNameLabel);
   thirdRow.add(lastNameLabel);
  thirdRow.add(lastNameLabel);

   fourthRow.add(firstName);
   fourthRow.add(lastName);

   fifthRow.add(addressLabel);

   sixthRow.add(address);

   seventhRow.add(cityLabel);
   seventhRow.add(stateLabel);
   seventhRow.add(zipLabel);

   eighthRow.add(city);
   eighthRow.add(state);
   eighthRow.add(zip);

  
//Add rows to panel
   fieldPanel.add(firstRow);
   fieldPanel.add(secondRow);
   fieldPanel.add(thirdRow);
   fieldPanel.add(fourthRow);
   fieldPanel.add(fifthRow);
   fieldPanel.add(sixthRow);
   fieldPanel.add(seventhRow);
   fieldPanel.add(eighthRow);

  
//Add button to panel
   buttonPanel.add(submitButton);

  
//Add panels to frame
   c.add(fieldPanel, BorderLayout.CENTER);
   c.add(buttonPanel, BorderLayout.SOUTH);

  
//Add functionality to buttons
   submitButton.addActionListener(this);

  
//Get the current date adn open the file
   Date today = new Date();
   SimpleDateFormat myFormat =
new SimpleDateFormat("MMddyyyy");
   String filename =
"payments" + myFormat.format(today);

  
try
   {
      output =
new DataOutputStream(new FileOutputStream(filename));
   }
  
catch(IOException io)
   {
      JOptionPane.showMessageDialog(
null,
     
"The program could not create a storage location.  Please check the disk drive and then run the program again.",
     
"Error",JOptionPane.INFORMATION_MESSAGE);

      System.exit(1);
   }

   addWindowListener(
     
new WindowAdapter()
      {
        
public void windowlosing(WindowEvent e)
         {
           
int answer = JOptionPane.showConfirmDialog(null,
           
"Are you sure you want to exit and submit the file?", "File Submission",
            JOptionPane.YES_NO_OPTION);
           
if (answer == JOptionPane.YES_OPTION)
               System.exit(0);
         }
      }
   );

}

  
public void actionPerformed(ActionEvent e)
   {
      String arg = e.getActionCommand();

     
if (checkFields())
      {
       
try
         {
            output.writeUTF(acctNum.getText());
            output.writeUTF(pmt.getText());
            output.writeUTF(firstName.getText());
            output.writeUTF(lastName.getText());
            output.writeUTF(address.getText());
            output.writeUTF(city.getText());
            output.writeUTF(state.getText());
            output.writeUTF(zip.getText());

            JOptionPane.showMessageDialog(
null,"The payment information has been saved.",
           
"Submission Successful",JOptionPane.INFORMATION_MESSAGE);
         }
        
catch(IOException c)
         {
            System.exit(1);
         }
         clearFields();
      }
   }

  
public boolean checkFields()
   {
     
if ((acctNum.getText().compareTo("")<1)    ||
          (pmt.getText().compareTo(
"")<1)        ||
          (firstName.getText().compareTo(
"")<1)  ||
          (lastName.getText().compareTo(
"")<1)   ||
          (address.getText().compareTo(
"")<1)    ||
          (city.getText().compareTo(
"")<1)       ||
          (state.getText().compareTo(
"")<1)      ||
          (zip.getText().compareTo(
"")<1))
      {
         JOptionPane.showMessageDialog(
null,"You must complete all fields.",
        
"Data Entry Error",JOptionPane.WARNING_MESSAGE);
        
return false;
      }
     
else
      {
        
return true;
      }
   }

  
public void clearFields()
   {
     
//clear fields and reset the focus
      acctNum.setText("");
      pmt.setText(
"");
      firstName.setText(
"");
      lastName.setText(
"");
      address.setText(
"");
      city.setText(
"");
      state.setText(
"");
      zip.setText(
"");
      acctNum.requestFocus();
   }
}

Homepage