Skip to content

Instantly share code, notes, and snippets.

@carbonrobot
Created September 23, 2015 02:03
Show Gist options
  • Save carbonrobot/1e36a5e5f061e9c8f16b to your computer and use it in GitHub Desktop.
Save carbonrobot/1e36a5e5f061e9c8f16b to your computer and use it in GitHub Desktop.
//Import all required Packages
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import java.awt.*;
import java.text.*;
import java.awt.event.*;
public class InterestApplet extends JApplet implements ActionListener {
JPanel row1;
JLabel lblAmount;
JTextField txtAmount;
JLabel lblInterest;
JTextField txtInterest;
JLabel lblTerm;
JTextField txtTerm;
JPanel row2;
JTable resultsTable;
JScrollPane textPane;
JPanel row3;
JButton calculateButton;
JButton clearButton;
JButton exitButton;
public void init()
{
//Build GUI
setSize(1024, 720);
// row1
row1 = new JPanel();
lblAmount = new JLabel(" Mortgage: $", JLabel.LEFT);
txtAmount = new JTextField(10);
lblInterest = new JLabel("Interest %", JLabel.LEFT);
txtInterest = new JTextField(6);
lblTerm = new JLabel("Term in Years", JLabel.LEFT);
txtTerm = new JTextField(6);
row1.add(lblAmount);
row1.add(txtAmount);
row1.add(lblInterest);
row1.add(txtInterest);
row1.add(lblTerm);
row1.add(txtTerm);
// row2
row2 = new JPanel(new BorderLayout());
DefaultTableModel model = CreateTableModel();
resultsTable = new JTable(model);
textPane = new JScrollPane(resultsTable);
textPane.setPreferredSize(new Dimension(610,200));
row2.add(textPane,BorderLayout.CENTER);
//row 3
row3 = new JPanel(new GridLayout(1,3,75,1));
calculateButton = new JButton("Calculate");
clearButton = new JButton("Clear");
exitButton = new JButton("Exit");
//Create Calculate button and add listener
calculateButton.addActionListener(this);
clearButton.addActionListener(this);
exitButton.addActionListener(this);
row3.add(exitButton);
row3.add(clearButton);
row3.add(calculateButton);
getContentPane().add(row1,BorderLayout.NORTH);
getContentPane().add(row2,BorderLayout.CENTER);
getContentPane().add(row3,BorderLayout.SOUTH);
}
//Define actions performed for buttons
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == calculateButton)
{
Double userAmount = Double.parseDouble(txtAmount.getText());
Double userInterest = Double.parseDouble(txtInterest.getText());
Integer userTerm = Integer.parseInt(txtTerm.getText());
CalculateMonthlyPayment(userAmount, userInterest, userTerm);
}
if (e.getSource() == clearButton){
DefaultTableModel model = CreateTableModel();
resultsTable.setModel(model);
txtAmount.setText("");
txtInterest.setText("");
txtTerm.setText("");
}
if (e.getSource() == exitButton){
setVisible(false);
System.exit(0);
}
}
private void addRow(int payment, double amount, double interest, double principal, double balance)
{
DefaultTableModel model = (DefaultTableModel)resultsTable.getModel();
model.addRow(new Object[]{
String.format("%s", payment),
String.format("%.2f", amount),
String.format("%.2f", interest),
String.format("%.2f", principal),
String.format("%.2f", balance)
});
}
private void CalculateMonthlyPayment(double p,double ir, int ny){
double b;
double im =(ir/12)/100;
int nm = ny*12;
double r,t,a;
int i;
r=p*im*Math.pow(1+im,(double)nm)/(Math.pow(1+im,(double)nm)-1);
//print amortization schedule for all months except the last month
for(i=1;i<nm;i++){
t = p*im;//interest paid
a = r-t; //principal paid
b = p-a; //new balance
addRow(i, r, t, a, b);
p = b; //update old balance
}
//last month
a = p;
t = p*im;
r = a+t;
b = 0.0;
addRow(i, r, t, a, b);
}
private DefaultTableModel CreateTableModel(){
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Payment");
model.addColumn("Monthly Payment");
model.addColumn("Interest Payment");
model.addColumn("Principal Payment");
model.addColumn("Balance");
return model;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment