I at least have the program working correctly thanks to the awesome help from various boards and people I work with. However, now I want to tweak the program a little bit. I am currently using a combobox for the interest rate and term. I would like to use either a radio button or a Menu item to do basically the same thing. I have two programs, one calls the other, however I don't think that it makes a difference since all the coding is done at the end of the program for this. Yes this is homework but I have been busting my hump to get this working. I just want to see if there is something else I can do to make this a little more different than what the other students in class are going to do and learn something along the way.

Thanks Gretchen

Here is my program and I will use <------------- to point to the area's I have questions.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class MortApp2 implements ActionListener
{
// String for combo box
String[] strRateTerms = { "7 year at 5.35%", "15 year at 5.5%", "30 year at 5.75%" };


// Declare our variables
static JFrame frame;
static JPanel mortPane;
static JPanel contentPane;
static JPanel pRow1;
static JPanel pRow2;
static JPanel pRow3;
static JPanel pRow4;
static JPanel pRow5;
static JLabel lblPrincipal;
static JLabel lblRateTerm;
static JLabel lblMonthlyPaymentLbl;
static JLabel lblMonthlyPayment;
static JTextField txtPrincipal;
static JTextField txtRate;
static JTextField txtTerm;
static JButton bCalculate;
static JButton bQuit;


// New vars
static JComboBox cbRateTerm; <-------------- Want to change Combobox to a Radio Button or Menu Item
static JTextArea txtMonths;
static JScrollPane spMonths;


static Mortcalc2 MC2;


private Component createComponents()
{
// Create the panels
contentPane = new JPanel(new GridLayout(2,1,0,0));
mortPane = new JPanel(new GridLayout(4,1,0,0));
pRow1 = new JPanel(new GridLayout(1,2,5,0));
pRow2 = new JPanel(new GridLayout(1,2,5,0));
pRow3 = new JPanel(new GridLayout(1,2,5,0));
pRow4 = new JPanel(new FlowLayout(FlowLayout.CENTER,5,0));
pRow5 = new JPanel(new FlowLayout(FlowLayout.CENTER,5,0));


// Create and add the components.
lblPrincipal = new JLabel("Principal:", JLabel.RIGHT);
txtPrincipal = new JTextField(20);
pRow1.add(lblPrincipal);
pRow1.add(txtPrincipal);


lblRateTerm = new JLabel("Rate/Term:", JLabel.RIGHT);
cbRateTerm = new JComboBox(strRateTerms); <--------------If I am a change to a menu item or a radio button do I need to make the change here also?
cbRateTerm.setSelectedIndex(0);
pRow2.add(lblRateTerm);
pRow2.add(cbRateTerm);


lblMonthlyPaymentLbl = new JLabel("Monthly Payment:", JLabel.RIGHT);
lblMonthlyPayment = new JLabel("");
pRow3.add(lblMonthlyPaymentLbl);
pRow3.add(lblMonthlyPayment);


bCalculate = new JButton("Calculate");
bCalculate.addActionListener(this);
pRow4.add(bCalculate);


bQuit = new JButton("Quit");
bQuit.addActionListener(this);
pRow4.add(bQuit);


txtMonths = new JTextArea(12, 50);
txtMonths.setEditable(false);
txtMonths.setTabSize(4);
spMonths = new JScrollPane(txtMonths, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
pRow5.add(spMonths);


// Add sub-panels to parents panel
mortPane.add(pRow1);
mortPane.add(pRow2);
mortPane.add(pRow3);
mortPane.add(pRow4);


contentPane.add(mortPane);
contentPane.add(pRow5);


// Return the content panel
return contentPane;
}


public void actionPerformed(ActionEvent e)
{
// Check which button triggered the event
if("Calculate".equals(e.getActionCommand()))
{
// Get information from fields
double principal =  new Double(txtPrincipal.getText()).doubleValue();
double rate;
int term;


int i = cbRateTerm.getSelectedIndex();
int j;


double monthlyPayment;
double monthlyInterestPayment;
double monthlyPrincipalPayment;
double balance = principal;


// Set rate and term based on which item in the combobox is selected
if(i == 0)
{
rate = 5.35;
term = 7;
}
else if(i == 1)
{
rate = 5.5;
term = 15;
}
else
{
rate = 5.75;
term = 30;
}


// Create a string format
java.text.DecimalFormat dec = new java.text.DecimalFormat("$,###.00");


// Create a new instance of Mortcalc2 with values from text boxes
MC2 = new Mortcalc2(principal, rate, term);


// Set the monthly payment
lblMonthlyPayment.setText(dec.format(MC2.getMonthlyPayment()));


// Get the monthly payment
monthlyPayment = MC2.getMonthlyPayment();


// Find out how many months in the term
j = term * 12;


// Clear old calculation
txtMonths.setText("");


// Print header
txtMonths.append("Month\t\tInterest\t\tPrincipal\t\tBalance\n");
txtMonths.append("\t\tPayment\tPayment\n\n");


// Loop through all months
for(i = 1; i < j + 1; i++)
{
// Get the monthly payment information
monthlyInterestPayment = MC2.getMonthlyInterestPayment();
monthlyPrincipalPayment = MC2.getMonthlyPrincipalPayment();
balance = MC2.getBalance();


// Print the information
txtMonths.append(i + ": " + "\t\t" + dec.format(monthlyInterestPayment) + "\t\t");
txtMonths.append(dec.format(monthlyPrincipalPayment) + "\t\t" + dec.format(balance) + "\n");


// Calculate next month
MC2.nextMonth();
}
}
else if("Quit".equals(e.getActionCommand()))
{
// Exit the program
System.exit(0);
}


}


private static void createAndShowGUI()
{
// Set window decorations
JFrame.setDefaultLookAndFeelDecorated(true);


// Create and set up the window.
frame = new JFrame("mortApp");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


// Create an instance of our application
MortApp2 app = new MortApp2();


// Create our components
Component contents = app.createComponents();


// Add components to frame
frame.getContentPane().add(contents);


// Display the window.
frame.pack();
frame.setVisible(true);


// Don't allow window to be resized
frame.setResizable(true);
}


public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}

Edited 3 Years Ago by happygeek: fixed formatting

Attachments
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MortApp2 implements ActionListener
{
    // String for combo box
    String[] strRateTerms = { "7 year at 5.35%", "15 year at 5.5%", "30 year at 5.75%" };

    // Declare our variables
    static JFrame frame;
    static JPanel mortPane;
    static JPanel contentPane;
    static JPanel pRow1;
    static JPanel pRow2;
    static JPanel pRow3;
    static JPanel pRow4;
    static JPanel pRow5;
    static JLabel lblPrincipal;
    static JLabel lblRateTerm;
    static JLabel lblMonthlyPaymentLbl;
    static JLabel lblMonthlyPayment;
    static JTextField txtPrincipal;
    static JTextField txtRate;
    static JTextField txtTerm;
    static JButton bCalculate;
    static JButton bQuit;

    // New vars
    static JComboBox cbRateTerm;
    static JTextArea txtMonths;
    static JScrollPane spMonths;

    static Mortcalc2 MC2;

    private Component createComponents()
    {
        // Create the panels
        contentPane = new JPanel(new GridLayout(2,1,0,0));
        mortPane = new JPanel(new GridLayout(4,1,0,0));
        pRow1 = new JPanel(new GridLayout(1,2,5,0));
        pRow2 = new JPanel(new GridLayout(1,2,5,0));
        pRow3 = new JPanel(new GridLayout(1,2,5,0));
        pRow4 = new JPanel(new FlowLayout(FlowLayout.CENTER,5,0));
        pRow5 = new JPanel(new FlowLayout(FlowLayout.CENTER,5,0));

        // Create and add the components.
        lblPrincipal = new JLabel("Principal:", JLabel.RIGHT);
        txtPrincipal = new JTextField(20);
        pRow1.add(lblPrincipal);
        pRow1.add(txtPrincipal);

        lblRateTerm = new JLabel("Rate/Term:", JLabel.RIGHT);
        cbRateTerm = new JComboBox(strRateTerms);
        cbRateTerm.setSelectedIndex(0);
        pRow2.add(lblRateTerm);
        pRow2.add(cbRateTerm);

        lblMonthlyPaymentLbl = new JLabel("Monthly Payment:", JLabel.RIGHT);
        lblMonthlyPayment = new JLabel("");
        pRow3.add(lblMonthlyPaymentLbl);
        pRow3.add(lblMonthlyPayment);

        bCalculate = new JButton("Calculate");
        bCalculate.addActionListener(this);
        pRow4.add(bCalculate);

        bQuit = new JButton("Quit");
        bQuit.addActionListener(this);
        pRow4.add(bQuit);

        txtMonths = new JTextArea(12, 50);
        txtMonths.setEditable(false);
        txtMonths.setTabSize(4);
        spMonths = new JScrollPane(txtMonths, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        pRow5.add(spMonths);

        // Add sub-panels to parents panel
        mortPane.add(pRow1);
        mortPane.add(pRow2);
        mortPane.add(pRow3);
        mortPane.add(pRow4);

        contentPane.add(mortPane);
        contentPane.add(pRow5);

        // Return the content panel
        return contentPane;
    }

    public void actionPerformed(ActionEvent e)
    {
        // Check which button triggered the event
        if("Calculate".equals(e.getActionCommand()))
        {
            // Get information from fields
            double principal =  new Double(txtPrincipal.getText()).doubleValue();
            double rate;
            int term;

            int i = cbRateTerm.getSelectedIndex();
            int j;

            double monthlyPayment;
            double monthlyInterestPayment;
            double monthlyPrincipalPayment;
            double balance = principal;

            // Set rate and term based on which item in the combobox is selected
            if(i == 0)
            {
                rate = 5.35;
                term = 7;
            }
            else if(i == 1)
            {
                rate = 5.5;
                term = 15;
            }
            else
            {
                rate = 5.75;
                term = 30;
            }

            // Create a string format
            java.text.DecimalFormat dec = new java.text.DecimalFormat("$,###.00");

            // Create a new instance of Mortcalc2 with values from text boxes
            MC2 = new Mortcalc2(principal, rate, term);

            // Set the monthly payment
            lblMonthlyPayment.setText(dec.format(MC2.getMonthlyPayment()));

            // Get the monthly payment
            monthlyPayment = MC2.getMonthlyPayment();

            // Find out how many months in the term
            j = term * 12;

            // Clear old calculation
            txtMonths.setText("");

            // Print header
            txtMonths.append("Month\t\tInterest\t\tPrincipal\t\tBalance\n");
            txtMonths.append("\t\tPayment\tPayment\n\n");

            // Loop through all months
            for(i = 1; i < j + 1; i++)
            {
                // Get the monthly payment information
                monthlyInterestPayment = MC2.getMonthlyInterestPayment();
                monthlyPrincipalPayment = MC2.getMonthlyPrincipalPayment();
                balance = MC2.getBalance();

                // Print the information
                txtMonths.append(i + ": " + "\t\t" + dec.format(monthlyInterestPayment) + "\t\t");
                txtMonths.append(dec.format(monthlyPrincipalPayment) + "\t\t" + dec.format(balance) + "\n");

                // Calculate next month
                MC2.nextMonth();
            }
        }
        else if("Quit".equals(e.getActionCommand()))
        {
            // Exit the program
            System.exit(0);
        }

    }

    private static void createAndShowGUI()
    {
        // Set window decorations
        JFrame.setDefaultLookAndFeelDecorated(true);

        // Create and set up the window.
        frame = new JFrame("mortApp");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create an instance of our application
        MortApp2 app = new MortApp2();

        // Create our components
        Component contents = app.createComponents();

        // Add components to frame
        frame.getContentPane().add(contents);

        // Display the window.
        frame.pack();
        frame.setVisible(true);

        // Don't allow window to be resized
        frame.setResizable(false);
    }

    public static void main(String[] args)
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}
import java.text.DecimalFormat;
import java.io.*;

public class Mortcalc2      // name of the program
{
    // global class variables
    private double principal;                                           // loan principal
    private double interestRateYears;                                   // annual interest rate (percentage)
    private double interestRateMonths;                                  // monthly interst rate
    private int termYears;                                              // length of loan in years
    private int termMonths;                                             // length of loan in months
    private double monthlyPayment;                                      // monthly payment

    private double balance;                                             // displays current balance
    private double interestPaid;                                        // displays the interest paid
    private double principalPaid;                                       // displays the principal paid
    private double monthlyInterestPayment;                              // holds current interest payment
    private double monthlyPrincipalPayment;                             // holds current principal payment

    private int currentMonth;

    java.text.DecimalFormat dec = new java.text.DecimalFormat(",###.00");

    public Mortcalc2(double p_Principal, double p_Rate, int p_Term)
    {
        // assign values
        principal = p_Principal;                                    // loan principal
        interestRateYears = p_Rate;                                 // annual interest rate (percentage)
        interestRateMonths = (interestRateYears / 12) / 100;        // monthly interest rate
        termYears = p_Term;                                         // length of loan in years
        termMonths = (termYears * 12);                              // length of loan in months
        monthlyInterestPayment = 0;                                 // set current interest payment = 0
        monthlyPrincipalPayment = 0;                                // set current principal payment = 0
        balance = principal;                                        // set current balance = principal

        currentMonth = 1;

        monthlyPayment = (principal * interestRateMonths) /         // calculate monthly payment
            (1 - Math.pow(1 + interestRateMonths, - termMonths));

        nextMonth();
    }

    public double getMonthlyPayment()
    {
        // return montlyPayment;
        return monthlyPayment;
    }

    public double getMonthlyInterestPayment()
    {
        // return montly interest payment
        return monthlyInterestPayment;
    }

    public double getMonthlyPrincipalPayment()
    {
        // return montly principal payment
        return monthlyPrincipalPayment;
    }

    public double getBalance()
    {
        // return balance
        return balance;
    }

    public void nextMonth()
    {
        if(currentMonth < termMonths + 1)
        {
            // calculate interest and principal payments
            monthlyInterestPayment = (balance * interestRateMonths);
            monthlyPrincipalPayment = (monthlyPayment - monthlyInterestPayment);
            balance = (balance - monthlyPrincipalPayment);
        }

        currentMonth++;
    }
} // End class Mortcalc2
This article has been dead for over six months. Start a new discussion instead.