/*
    program:bankAccount
    Name:JustinLubarsky
    Date:Nov072008
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
public class bankAccount extends JFrame
{
    /* ------------------------- declarations */
    // color objects
    
    Color black = new Color(0, 0, 0);
    Color white = new Color(255, 255, 255);
    Color light_gray = new Color(192, 192, 192);
    // inputs
    
    JLabel depositAmmountJLabel;
    JTextField depositAmmountJTextField;
    
    JLabel withdrawAmmountJLabel;
    JTextField withdrawAmmountJTextField;
    // outputs
    
    JLabel currentBalanceJLabel;
    JTextField currentBalanceJTextField;
    
    JLabel currentStatusJLabel;
    JTextField currentStatusJTextField;
    // controls
    
    JButton enterJButton;
    JButton clearJButton;
    JButton closeJButton;
    // variables 
    
    int startingBalance = 0;
    Double depositAmmount;
    Double withdrawAmmount;
    Double currentBalance;
    String currentStatus;
    // objects classes
    
    DecimalFormat decimalFormat;
    public bankAccount()    
    {
        createUserInterface();
    }
    public void createUserInterface()
    {
        Container contentPane = getContentPane();
        contentPane.setBackground(white);
        contentPane.setLayout(null);
        
        //*--------------------- initialize *\
        // inputs
        
        depositAmmountJLabel = new JLabel();
        depositAmmountJLabel.setBounds(50, 50, 120, 20);
        depositAmmountJLabel.setFont(new Font("Default", Font.PLAIN, 12));
        depositAmmountJLabel.setText("Deposit Ammount");
        depositAmmountJLabel.setForeground(black);
        depositAmmountJLabel.setHorizontalAlignment(JLabel.LEFT);
        contentPane.add(depositAmmountJLabel);
        depositAmmountJTextField = new JTextField();
        depositAmmountJTextField.setBounds(200, 50, 80, 20);
        depositAmmountJTextField.setFont(new Font("Default", Font.PLAIN, 12));
        depositAmmountJTextField.setHorizontalAlignment(JTextField.CENTER);
        depositAmmountJTextField.setForeground(black);
        depositAmmountJTextField.setBackground(white);
        depositAmmountJTextField.setEditable(true);
        contentPane.add(depositAmmountJTextField);
        
        withdrawAmmountJLabel = new JLabel();
        withdrawAmmountJLabel.setBounds(50, 80, 120, 20);
        withdrawAmmountJLabel.setFont(new Font("Default", Font.PLAIN, 12));
        withdrawAmmountJLabel.setText("Withdraw Ammount");
        withdrawAmmountJLabel.setForeground(black);
        withdrawAmmountJLabel.setHorizontalAlignment(JLabel.LEFT);
        contentPane.add(withdrawAmmountJLabel);
        withdrawAmmountJTextField = new JTextField();
        withdrawAmmountJTextField.setBounds(200, 80, 80, 20);
        withdrawAmmountJTextField.setFont(new Font("Default", Font.PLAIN, 12));
        withdrawAmmountJTextField.setHorizontalAlignment(JTextField.CENTER);
        withdrawAmmountJTextField.setForeground(black);
        withdrawAmmountJTextField.setBackground(white);
        withdrawAmmountJTextField.setEditable(true);
        contentPane.add(withdrawAmmountJTextField);
        // outputs
        
        currentBalanceJLabel = new JLabel();
        currentBalanceJLabel.setBounds(50, 110, 100, 20);
        currentBalanceJLabel.setFont(new Font("Default", Font.PLAIN, 12));
        currentBalanceJLabel.setText("Current Balance");
        currentBalanceJLabel.setForeground(black);
        currentBalanceJLabel.setHorizontalAlignment(JLabel.LEFT);
        contentPane.add(currentBalanceJLabel);
        currentBalanceJTextField = new JTextField();
        currentBalanceJTextField.setBounds(200, 110, 80, 20);
        currentBalanceJTextField.setFont(new Font("Default", Font.PLAIN, 12));
        currentBalanceJTextField.setHorizontalAlignment(JTextField.CENTER);
        currentBalanceJTextField.setForeground(black);
        currentBalanceJTextField.setBackground(white);
        currentBalanceJTextField.setEditable(false);
        contentPane.add(currentBalanceJTextField);
        
        currentStatusJLabel = new JLabel();
        currentStatusJLabel.setBounds(50, 140, 100, 20);
        currentStatusJLabel.setFont(new Font("Default", Font.PLAIN, 12));
        currentStatusJLabel.setText("Account Status");
        currentStatusJLabel.setForeground(black);
        currentStatusJLabel.setHorizontalAlignment(JLabel.LEFT);
        contentPane.add(currentStatusJLabel);
        currentStatusJTextField = new JTextField();
        currentStatusJTextField.setBounds(200, 140, 120, 20);
        currentStatusJTextField.setFont(new Font("Default", Font.PLAIN, 12));
        currentStatusJTextField.setHorizontalAlignment(JTextField.CENTER);
        currentStatusJTextField.setForeground(black);
        currentStatusJTextField.setBackground(white);
        currentStatusJTextField.setEditable(false);
        contentPane.add(currentStatusJTextField);
        // controls
        
        enterJButton = new JButton();
        enterJButton.setBounds(20, 300, 100, 20);
        enterJButton.setFont(new Font("Default", Font.PLAIN, 12));
        enterJButton.setText("Enter");
        enterJButton.setForeground(black);
        enterJButton.setBackground(white);
        contentPane.add(enterJButton);
        enterJButton.addActionListener(
            new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    enterJButtonActionPerformed(event);
                }
            }
        );
        clearJButton = new JButton();
        clearJButton.setBounds(150, 300, 100, 20);
        clearJButton.setFont(new Font("Default", Font.PLAIN, 12));
        clearJButton.setText("Clear");
        clearJButton.setForeground(black);
        clearJButton.setBackground(white);
        contentPane.add(clearJButton);
        clearJButton.addActionListener(
            new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    clearJButtonActionPerformed(event);
                }
            }
        );
        closeJButton = new JButton();
        closeJButton.setBounds(280, 300, 100, 20);
        closeJButton.setFont(new Font("Default", Font.PLAIN, 12));
        closeJButton.setText("Close");
        closeJButton.setForeground(black);
        closeJButton.setBackground(white);
        contentPane.add(closeJButton);
        closeJButton.addActionListener(
            new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    closeJButtonActionPerformed(event);
                }
            }
        );
        setTitle("bankAccount");
        setSize(400, 400);
        setVisible(true);
    }
    // main method
    
    public  static void main(String[] args)
    {
        bankAccount application = new bankAccount();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public void enterJButtonActionPerformed(ActionEvent event)
    {
        getDepositAmmount();
        getWithdrawAmount();
    }
    
    public void getDepositAmmount()
    {
        try
        {
            depositAmmount = Double.parseDouble(depositAmmountJTextField.getText());
            getWithdrawAmount();
         }
        catch(NumberFormatException exception)
        {
            JOptionPane.showMessageDialog(this,
            "Please enter a deposit amount!",
            "Number format Error", JOptionPane.ERROR_MESSAGE);
            depositAmmountJTextField.setText("");
            depositAmmountJTextField.requestFocusInWindow();
        }
    }
    
    public void getWithdrawAmount()
    {
        try
        {
            withdrawAmmount = Double.parseDouble(withdrawAmmountJTextField.getText());
            getCurrentBalance();
         }
        catch(NumberFormatException exception)
        {
            JOptionPane.showMessageDialog(this,
            "Please enter a withdraw amount!",
            "Number format Error", JOptionPane.ERROR_MESSAGE);
            withdrawAmmountJTextField.setText("");
            withdrawAmmountJTextField.requestFocusInWindow();
        }
    }
    
    /*public void getCurrentBalance()
    {
        currentBalance = withdrawAmmount + startingBalance;
        displayCurrentBalance();
    } // for withdraw*/
    
    public void getCurrentBalance()
    {
        currentBalance = startingBalance + depositAmmount - withdrawAmmount;
        displayCurrentBalance();
    }
    
    public void displayCurrentBalance()
    {
        decimalFormat = new DecimalFormat("$0.00");
        currentBalanceJTextField.setText("" + decimalFormat.format(currentBalance));
        getCurrentStatus();
    }
    
    public void getCurrentStatus()
    {
        if(currentBalance > 0 )  
        {
            currentStatus = "Sufficient Funds";
        }
        else if (currentBalance <= 0)  
        {
            currentStatus = "Insufficient Funds";
        }
        
        currentStatusJTextField.setText("" + currentStatus);
        displayCurrentStatus();  
    }
    
    public void displayCurrentStatus()
    {
        currentStatusJTextField.setText("" + currentStatus);
    }
    
    /*public void getWithdrawAmmount()
    {
        try
        {
            withdrawAmmount = Integer.parseInt(withdrawAmmountJTextField.getText());
            //getWithdrawAmmount();
         }
        catch(NumberFormatException exception)
        {
            JOptionPane.showMessageDialog(this,
            "Please enter a number!",
            "Number format Error", JOptionPane.ERROR_MESSAGE);
            withdrawAmmountJTextField.setText("");
            withdrawAmmountJTextField.requestFocusInWindow();
        }
    }*/
    
    
    
    
    
    public void clearJButtonActionPerformed(ActionEvent event)
    {
        depositAmmountJTextField.setText("");
        withdrawAmmountJTextField.setText("");
    }
    public void closeJButtonActionPerformed(ActionEvent event)
    {
        bankAccount.this.dispose();
    }
}