This code is not java application but rather a java applet that can run in a web browser. Main difference between a java application and a java applet is that an applet does NOT have a main method that all java applications must have.
NOTE: I would like to thank all from the comp . lang . java . programmer goggle group that helped out with the amortization schedule formulas and the math part of the program as I am not that good in math :)
/**
* Author: http://javacodee.blogspot.com/
* Date: Aug 7, 2007
* Time: 7:59:28 PM
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.*;
public class LoanSchedule extends JApplet implements ActionListener
{
//Create all needed labels
private JLabel jlblLoanAmount = new JLabel("Loan Amount");
private JLabel jlblNumOfYears = new JLabel("Number Of Years");
private JLabel jlblInterestRate = new JLabel("Interest Rate (Annual)");
//Create all needed text fields
private JTextField jtfLoanAmount = new JTextField(10);
private JTextField jtfNumOfYears = new JTextField(10);
private JTextField jtfInterestRate = new JTextField(10);
//Calculate button is also needed
private JButton jbtCalculate = new JButton("Amortize Loan");
//...and a text area where the results will be displayed
private JTextArea jtaResults = new JTextArea();
public void init()
{
//Panel p1 will hold the input
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(3,2));
p1.add(jlblLoanAmount);
p1.add(jtfLoanAmount);
p1.add(jlblNumOfYears);
p1.add(jtfNumOfYears);
p1.add(jlblInterestRate);
p1.add(jtfInterestRate);
//Panel p2 will hold panel p1 and the calculate button
JPanel p2 = new JPanel();
p2.setLayout(new BorderLayout());
p2.setBorder(new TitledBorder("Enter loan amount, Number of years and annual interest rate"));
p2.add(p1, BorderLayout.WEST);
p2.add(jbtCalculate, BorderLayout.EAST);
//Action listener for the button
jbtCalculate.addActionListener(this);
//Make the text area scrollable and uneditable
JScrollPane scrollPane = new JScrollPane(jtaResults);
jtaResults.setRows(12);
jtaResults.setEditable(false);
//Place the two panels to the applet
getContentPane().add(p2, BorderLayout.CENTER);
getContentPane().add(scrollPane, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jbtCalculate)
calculateLoan();
else
System.out.println("you will never see this text!");
/*
Because we only have one element that uses actionListener (jbtCalculate) this method should only have
a call to calculate() method in it but i put the if-else statement just to show that it can handle other
elements with alctiolistener. For example, if we had another button that had addActionListener attached to it
we could say something like this:
if(e.getSource() == jbtCalculate)
{
do something here;
}
else if(e.getSource() == jbtSomeOtherElement)
{
do something else here;
}
*/
}
public void calculateLoan()
{
int numberOfYears = Integer.parseInt(jtfNumOfYears.getText());
double loanAmount = Double.parseDouble(jtfLoanAmount.getText());
double annualInterestRate = (Double.parseDouble(jtfInterestRate.getText())) / 100;
double monthlyInterestRate = annualInterestRate / 12;
double numberOfMonths = numberOfYears * 12;
double monthlyPayment = loanAmount * (monthlyInterestRate / (1 - Math.pow(1 + monthlyInterestRate, - numberOfMonths)));
double totalPayment = monthlyPayment * numberOfMonths;
double balance = loanAmount;
double interest;
double principal;
jtaResults.append("Payment#\t" + "Interest\t" + "Principal\t" + "Balance\n\n");
for(int i = 0; i < numberOfYears * 12; i++)
{
interest = (int)(monthlyInterestRate * balance * 100) / 100.0;
principal = (int)((monthlyPayment - interest) * 100 ) / 100.0;
balance = (int)((balance - principal) * 100 ) / 100.0;
jtaResults.append(i + 1 + "\t" + interest + "\t" + principal + "\t" + balance +"\n");
}
jtaResults.append("\n\nMonthly Payment: $" + (int)(monthlyPayment * 100) / 100.0 + "\n");
jtaResults.append("Total Payment: $" + (int)(totalPayment * 100) / 100.0 + "\n\n");
}
}