Skip to content

Instantly share code, notes, and snippets.

@loloDawit
Created January 24, 2016 00:25
Show Gist options
  • Select an option

  • Save loloDawit/5117eb4ca95c1f5ed47b to your computer and use it in GitHub Desktop.

Select an option

Save loloDawit/5117eb4ca95c1f5ed47b to your computer and use it in GitHub Desktop.
AutoLoanCalculator
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.text.MessageFormat;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
/**
*
* @author Dave
*/
public class autoLoanMenu extends javax.swing.JFrame {
private String saveLocation = null;
/**
* Creates new form mainMenu
*/
public autoLoanMenu() {
initComponents();
setLocationRelativeTo(null);// set the application to start at the center of the screen
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
mainPanel = new javax.swing.JPanel();
titleLabel = new javax.swing.JLabel();
loanLabel = new javax.swing.JLabel();
aprLabel = new javax.swing.JLabel();
termLabel = new javax.swing.JLabel();
loanTextField = new javax.swing.JTextField();
aprTextField = new javax.swing.JTextField();
termTextField = new javax.swing.JTextField();
resetB = new javax.swing.JButton();
calculateB = new javax.swing.JButton();
pb = new javax.swing.JButton();
yearLabel = new javax.swing.JLabel();
resultPanel = new javax.swing.JPanel();
tableScrolPane = new javax.swing.JScrollPane();
rest = new javax.swing.JTable();
backB = new javax.swing.JButton();
extrapayment = new javax.swing.JLabel();
extraText = new javax.swing.JTextField();
payoff = new javax.swing.JLabel();
interestLabel = new javax.swing.JLabel();
resultLabel = new javax.swing.JLabel();
Interestpaid = new javax.swing.JLabel();
orP = new javax.swing.JLabel();
MenuBar = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
saveItem = new javax.swing.JMenuItem();
saveas = new javax.swing.JMenuItem();
exitItem = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
editMenu = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Amorization Calculator");
setResizable(false);
titleLabel.setFont(new java.awt.Font("Lucida Grande", 1, 18)); // NOI18N
titleLabel.setText(" Loan Calculator");
loanLabel.setText("Loan Amount:");
aprLabel.setText("APR (%):");
termLabel.setText("Loan Term");
loanTextField.setForeground(new java.awt.Color(204, 204, 204));
loanTextField.setBorder(javax.swing.BorderFactory.createEtchedBorder());
loanTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
loanTextFieldActionPerformed(evt);
}
});
aprTextField.setBorder(javax.swing.BorderFactory.createEtchedBorder());
termTextField.setBorder(javax.swing.BorderFactory.createEtchedBorder());
resetB.setText("Reset");
resetB.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resetBActionPerformed(evt);
}
});
calculateB.setText("Calculate");
calculateB.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
calculateBActionPerformed(evt);
}
});
pb.setText("Print");
pb.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pbActionPerformed(evt);
}
});
yearLabel.setText("Years");
resultPanel.setToolTipText("Summary");
resultPanel.setLayout(new java.awt.BorderLayout());
rest.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
rest.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Month", "Monthly Payment", "Principal Paid", "Interest Paid", "Balance"
}
));
rest.setAutoscrolls(isResizable());
rest.setShowGrid(false);
rest.getTableHeader().setResizingAllowed(false);
rest.getTableHeader().setReorderingAllowed(false);
tableScrolPane.setViewportView(rest);
backB.setText("Back");
backB.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
backBActionPerformed(evt);
}
});
extrapayment.setText("Extra Payment Per Month");
extraText.setBorder(javax.swing.BorderFactory.createEtchedBorder());
payoff.setForeground(new java.awt.Color(51, 51, 51));
payoff.setText("Payoff Earlier By:");
interestLabel.setForeground(new java.awt.Color(51, 51, 51));
resultLabel.setForeground(new java.awt.Color(51, 51, 51));
Interestpaid.setForeground(new java.awt.Color(51, 51, 51));
orP.setForeground(new java.awt.Color(51, 51, 51));
orP.setText("With Additinal Payment: ");
javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(63, 63, 63)
.addComponent(titleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(loanLabel)
.addComponent(aprLabel)
.addComponent(termLabel)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(resetB)))
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(calculateB)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(pb))
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(35, 35, 35)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(aprTextField)
.addComponent(termTextField)
.addComponent(loanTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 66, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(yearLabel)
.addGap(72, 72, 72)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(interestLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(resultLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Interestpaid, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(resultPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(orP)
.addComponent(payoff))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())))
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addComponent(extrapayment)
.addGap(5, 5, 5)
.addComponent(extraText, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(tableScrolPane, javax.swing.GroupLayout.PREFERRED_SIZE, 488, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(backB, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
);
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(titleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(orP))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(loanLabel)
.addComponent(loanTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(payoff))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(aprTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(aprLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(termTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(termLabel)
.addComponent(yearLabel)))
.addGap(6, 6, 6)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(extrapayment)
.addComponent(extraText, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(resetB)
.addComponent(calculateB)
.addComponent(pb)))
.addComponent(resultPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(mainPanelLayout.createSequentialGroup()
.addComponent(interestLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(resultLabel)
.addGap(11, 11, 11)
.addComponent(Interestpaid)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tableScrolPane, javax.swing.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
.addGap(177, 177, 177)
.addComponent(backB)))
.addContainerGap())
);
jMenu1.setText("File");
saveItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, 0));
saveItem.setIcon(new javax.swing.ImageIcon("/Users/Dave/Desktop/Save.png")); // NOI18N
saveItem.setText("Save");
saveItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveItemActionPerformed(evt);
}
});
jMenu1.add(saveItem);
saveas.setText("Save As");
saveas.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveasActionPerformed(evt);
}
});
jMenu1.add(saveas);
exitItem.setIcon(new javax.swing.ImageIcon("/Users/Dave/Desktop/exit.png")); // NOI18N
exitItem.setText("Exit");
exitItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitItemActionPerformed(evt);
}
});
jMenu1.add(exitItem);
MenuBar.add(jMenu1);
jMenu2.setText("Edit");
editMenu.setIcon(new javax.swing.ImageIcon("/Users/Dave/Desktop/calculator-icon.png")); // NOI18N
editMenu.setText("calculation Help");
editMenu.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editMenuActionPerformed(evt);
}
});
jMenu2.add(editMenu);
MenuBar.add(jMenu2);
setJMenuBar(MenuBar);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 563, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void resetBActionPerformed(java.awt.event.ActionEvent evt) {
// resets the tabel
DefaultTableModel model = (DefaultTableModel) rest.getModel();
model.setRowCount(0);
//resets everything
loanTextField.setText("");
aprTextField.setText("");
termTextField.setText("");
resultLabel.setText("");
interestLabel.setText("");
Interestpaid.setText("");
extraText.setText("");
}
private void calculateBActionPerformed(java.awt.event.ActionEvent evt) {
try{
DefaultTableModel model = (DefaultTableModel) rest.getModel();
double interest ;
double newbal;
double numberofpayments;
double monthlypayment, initalpayment, principalpaid,interestpaid;
double totalinterestpaid;
int i;
double monthlypayment1;
double nofpayments;
double principal = Double.parseDouble(loanTextField.getText());// changes the user input "String" to double
double aprtext = Double.parseDouble(aprTextField.getText());//changes the user input "String" to double
double termtext = Double.parseDouble(termTextField.getText());// changes the user input "String" to double
double extra = Double.parseDouble(extraText.getText());
if(principal == 0 || termtext==0){
JOptionPane.showMessageDialog(this,"Please Check Your Input!!"); // error message with show up if the input for text field is zero
}else{
// the calcution starts here
interest = ((aprtext/12)/100);// changes the user input "years" to months
numberofpayments= termtext*12;
monthlypayment = principal*interest*Math.pow(1+ interest,(double)numberofpayments)/(Math.pow(1+ interest,(double)numberofpayments)-1);
for (i=1; i<=numberofpayments;i++){
initalpayment = principal *interest;
principalpaid = monthlypayment- initalpayment;
String pp = String.format("%.2f",principalpaid);
interestpaid = monthlypayment-principalpaid;
String ip = String.format("%.2f",interestpaid);
monthlypayment1 =(monthlypayment);
String monthlypay = String.format("%.2f", monthlypayment1);
resultLabel.setText("Monthly payment: "+"$"+monthlypay);
nofpayments = (monthlypayment*numberofpayments);
String month = String.format("%.2f",nofpayments);
interestLabel.setText("Total Payment: "+"$"+month);
orP.setText("Interest Saving: "+ " $"+extra);
totalinterestpaid = (monthlypayment*numberofpayments)-principal;
String totalinterest = String.format("%.2f",totalinterestpaid );//creates new String and uses String.format to change decimal palces
Interestpaid.setText("Total Interest Paid: "+(totalinterest));
newbal = principal-principalpaid-extra;
String nb = String.format("%.2f",newbal);
if(newbal<0){
numberofpayments=i;
newbal=0;
nb = String.format("%.2f",newbal);
}
principal = newbal;
model.addRow(new Object[]{i,monthlypay,pp,ip,nb});
payoff.setText("Payoff Earlier By:"+i+" Month");
}
}
}
catch(NumberFormatException e){
JOptionPane.showMessageDialog(this,"Please Enter a Number!!");
}
}
private void backBActionPerformed(java.awt.event.ActionEvent evt) {
frontMenu menu = new frontMenu(this,true);
setVisible(false);
dispose();
menu.setVisible(true);
}
private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {
this.dispose();
}
private void saveItemActionPerformed(java.awt.event.ActionEvent evt) {
try {
export ex = new export();
// ex.exportTable();
} catch (Exception e) {
}
}
private void saveasActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser file = new JFileChooser();
// file.setFileFilter(new BofFillter());
file.setAcceptAllFileFilterUsed(false);
int result = file.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File xfile = file.getSelectedFile();
String fileName = xfile.toString();
if (!fileName.toLowerCase().endsWith(".dat")) {
fileName += ".bof";
}
boolean saved = saveFile(fileName);
if (saved) {
saveLocation = fileName;
}
}
}
private void editMenuActionPerformed(java.awt.event.ActionEvent evt) {
calculationMenu menu = new calculationMenu();
menu.setVisible(true);
}
private void pbActionPerformed(java.awt.event.ActionEvent evt) {
MessageFormat header = new MessageFormat ("Amortization Summary");
MessageFormat footer = new MessageFormat ("page(0,number,integer)");
try{
rest.print(JTable.PrintMode.NORMAL,header,footer);
}catch(java.awt.print.PrinterException e){
System.err.format("can not print this",e.getMessage());
}
}
private void loanTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
}
private boolean saveFile(String filename){
try{
try (FileOutputStream file = new FileOutputStream(filename+".docx")) {
ObjectOutputStream objOut = new ObjectOutputStream(file);
objOut.close();
}
return true;
}catch( FileNotFoundException ex){
return false;
}catch(IOException ex){
return false;
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(autoLoanMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(autoLoanMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(autoLoanMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(autoLoanMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(() -> {
new autoLoanMenu().setVisible(true);
});
}
// Variables declaration - do not modify
private javax.swing.JLabel Interestpaid;
private javax.swing.JMenuBar MenuBar;
private javax.swing.JLabel aprLabel;
private javax.swing.JTextField aprTextField;
private javax.swing.JButton backB;
private javax.swing.JButton calculateB;
private javax.swing.JMenuItem editMenu;
private javax.swing.JMenuItem exitItem;
private javax.swing.JTextField extraText;
private javax.swing.JLabel extrapayment;
private javax.swing.JLabel interestLabel;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JLabel loanLabel;
private javax.swing.JTextField loanTextField;
private javax.swing.JPanel mainPanel;
private javax.swing.JLabel orP;
private javax.swing.JLabel payoff;
private javax.swing.JButton pb;
private javax.swing.JButton resetB;
private javax.swing.JTable rest;
private javax.swing.JLabel resultLabel;
private javax.swing.JPanel resultPanel;
private javax.swing.JMenuItem saveItem;
private javax.swing.JMenuItem saveas;
private javax.swing.JScrollPane tableScrolPane;
private javax.swing.JLabel termLabel;
private javax.swing.JTextField termTextField;
private javax.swing.JLabel titleLabel;
private javax.swing.JLabel yearLabel;
// End of variables declaration
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment