Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Mortgage calculator with GUI- Clear button not working

Posted on 2006-07-21
9
Medium Priority
?
467 Views
Last Modified: 2013-11-23
This is a mortgage calculator with GUI. The clear button is supposed top clear all fields so that the user can start over. Please help, I get errors when I click on the clear button.

import javax.swing.*;
   import java.awt.*;
   import java.awt.event.*;
   import java.io.*;
   import java.text.DecimalFormat;
   import javax.swing.JTextField.*;

   import java.text.NumberFormat;

    public class MortgagePay extends JFrame implements ActionListener
   {
         private static String default_loan = null;
         private static String default_term = null;
         private static String default_rate = null;
         private static String default_payment = null;



      //setup format for currency
          DecimalFormat money = new DecimalFormat("$###,###.00");


          //Declare output stream
          DataOutputStream output;

          //Construct a panel for each row
          private JPanel firstRow = new JPanel();
          private JPanel secondRow = new JPanel();
          private JPanel thirdRow = new JPanel();
          private JPanel fourthRow = new JPanel();

          //Construct a panel for the fields and buttons
          JPanel fieldPanel = new JPanel();
          JPanel buttonPanel = new JPanel();

          private JTextField loanField;
          private JTextField termField;
          private JTextField rateField;
          private JTextField paymentField;

          //Construct labels and text boxes
          private JLabel loanLabel = new JLabel("Mortgage Amount:          ");
          private JTextField p  = new JTextField(15);
          private JLabel termLabel = new JLabel("Term (in years):");
          private JTextField t = new JTextField(5);
          private JLabel rateLabel = new JLabel("Interest Rate:");
          private JTextField r = new JTextField(5);
          private JLabel paymentLabel = new JLabel("Payment:");
          private JTextField m = new JTextField(15);
          private JLabel displayPayment = new JLabel();

          //Construct Buttons
          private JButton calculateButton = new JButton("Calculate Payment");
          private JButton clearButton = new JButton("Clear");
          private JButton quitButton = new JButton ("Quit");


       public static void main(String[] args)
      {

      //Set look and feel for the interface
         try
         {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
         }

         catch (Exception e)
         {


            }
         MortgagePay f = new MortgagePay();

         f.setSize(450,350);
         f.setTitle("Mortgage Payment Calculator");
         f.setResizable(false);
         f.setLocation(200,200);
         f.setVisible(true);
      }

       public MortgagePay()
      {
          //Bulid Container
          Container c = getContentPane();
              c.setLayout((new BorderLayout()));
          fieldPanel.setLayout(new GridLayout(8,1));
          FlowLayout rowSetup = new FlowLayout(FlowLayout.LEFT,5,3);
               firstRow.setLayout(rowSetup);
               secondRow.setLayout(rowSetup);
               thirdRow.setLayout(rowSetup);
               fourthRow.setLayout(rowSetup);

          buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
          buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));



          //add fields to rows
          firstRow.add(loanLabel);
          firstRow.add(p);
          secondRow.add(termLabel);
          secondRow.add(t);
          thirdRow.add(rateLabel);
          thirdRow.add(r);
          fourthRow.add(paymentLabel);
          fourthRow.add(m);
          fourthRow.add(displayPayment);

          //Add rows to panel
          fieldPanel.add(firstRow);
          fieldPanel.add(secondRow);
          fieldPanel.add(thirdRow);
          fieldPanel.add(fourthRow);
          //add button to panel
          buttonPanel.add(calculateButton);
          buttonPanel.add(clearButton);
          buttonPanel.add(quitButton);

          //Add panels to frame
          c.add(fieldPanel, BorderLayout.CENTER);
          c.add(buttonPanel, BorderLayout.SOUTH);

          //add fuctionality to the button
          calculateButton.addActionListener(this);
          clearButton.addActionListener(this);
          quitButton.addActionListener(this);

     }

       public void actionPerformed(ActionEvent e)
      {
              Object source = e.getSource();


               if(source == clearButton)
                  {
                  loanField.setText(null);
                  termField.setText(null);
                  rateField.setText(null);
                  paymentField.setText(null);

                  }
               if(source == quitButton)
               {
                     System.exit(0);
               }


               //This is going to call the method for doing the math
               mortCal();

       }

                 public void mortCal()
               {
               double principle = Double.parseDouble(p.getText());
               double rate = Double.parseDouble(r.getText());
               double term = Double.parseDouble(t.getText());
               double interest = (rate/100/12);
               double payment = (principle*interest)/(1-Math.pow(1/(1+interest), term*12));
               String displayPayment = (money.format(payment));
               paymentLabel.setText("" + "$" + payment);
               }
   }
0
Comment
Question by:jjbraxton
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
9 Comments
 
LVL 23

Expert Comment

by:Ajay-Singh
ID: 17158816
You are not initialzing "loanField" variable.
0
 
LVL 23

Expert Comment

by:Ajay-Singh
ID: 17158822
>                loanField.setText(null);
>                termField.setText(null);
>                rateField.setText(null);
>                paymentField.setText(null);
try changing this to:

            p.setText(null);
            t.setText(null);
            r.setText(null);
            m.setText(null);
0
 
LVL 23

Expert Comment

by:Ajay-Singh
ID: 17158829
the function mortCal() should also be changed as:


    public void mortCal() {
        if (p.getText().trim().length() == 0 || r.getText().trim().length() == 0 || t.getText().trim().length() == 0) {
            paymentLabel.setText("Payment:");
            return;
        }

        double principle = Double.parseDouble(p.getText());
        double rate = Double.parseDouble(r.getText());
        double term = Double.parseDouble(t.getText());
        double interest = (rate / 100 / 12);
        double payment = (principle * interest) / (1 - Math.pow(1 / (1 + interest), term * 12));
        displayPayment.setText("" + NumberFormat.getCurrencyInstance(Locale.US).format(payment));
    }
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 23

Expert Comment

by:Ajay-Singh
ID: 17158832
In my last comment,
> paymentLabel.setText("Payment:");
should be:
displayPayment.setText(null);
0
 
LVL 10

Assisted Solution

by:mukundha_expert
mukundha_expert earned 400 total points
ID: 17158928
jjbraxton ,

1.
as Ajay-Singh said change,

>                loanField.setText(null);
>                termField.setText(null);
>                rateField.setText(null);
>                paymentField.setText(null);
try changing this to:

            p.setText(null);
            t.setText(null);
            r.setText(null);
            m.setText(null);

2.
Change you actionPerformed() method ( jus a small modification to yours)
      public void actionPerformed(ActionEvent e)
     {
            Object source = e.getSource();


             if(source == clearButton)
               {
//               loanField.setText(null);
//               termField.setText(null);
//               rateField.setText(null);
//               paymentField.setText(null);
                  
                 p.setText(null);
                 t.setText(null);
                 r.setText(null);
                 m.setText(null);

               }
             if(source == quitButton)
             {
                  System.exit(0);
             }

           // Note the chnage
             if ( source == calculateButton )
             //This is going to call the method for doing the math
               mortCal();

       }

3.
The mortcal() need no te changed except the payment shoould be displayed in the textbox .. not in the label

               public void mortCal()
               {
               double principle = Double.parseDouble(p.getText());
               double rate = Double.parseDouble(r.getText());
               double term = Double.parseDouble(t.getText());
               double interest = (rate/100/12);
               double payment = (principle*interest)/(1-Math.pow(1/(1+interest), term*12));
               String displayPayment = (money.format(payment));
                ///Note the change
               m.setText("" + "$" + payment);
               }
   }



BTW,

what will happen if the user enters some characters instead of Numbers, try to check the exceptions in the mortcalc() METHOD
0
 
LVL 10

Expert Comment

by:mukundha_expert
ID: 17158930
>>The mortcal() need no te changed
mortcalc() need not be changed
0
 

Author Comment

by:jjbraxton
ID: 17158933
Thanks. It compiled without errors, but now the Calculate button is not working. This the program with your suggested changes.

import javax.swing.*;
   import java.awt.*;
   import java.awt.event.*;
   import java.io.*;
   import java.text.DecimalFormat;
   import javax.swing.JTextField.*;

   import java.text.NumberFormat;

    public class MortgagePay extends JFrame implements ActionListener
   {
         private static String default_loan = null;
         private static String default_term = null;
         private static String default_rate = null;
         private static String default_payment = null;



      //setup format for currency
          DecimalFormat money = new DecimalFormat("$###,###.00");


          //Declare output stream
          DataOutputStream output;

          //Construct a panel for each row
          private JPanel firstRow = new JPanel();
          private JPanel secondRow = new JPanel();
          private JPanel thirdRow = new JPanel();
          private JPanel fourthRow = new JPanel();

          //Construct a panel for the fields and buttons
          JPanel fieldPanel = new JPanel();
          JPanel buttonPanel = new JPanel();

          private JTextField loanField;
          private JTextField termField;
          private JTextField rateField;
          private JTextField paymentField;

          //Construct labels and text boxes
          private JLabel loanLabel = new JLabel("Mortgage Amount:          ");
          private JTextField p  = new JTextField(15);
          private JLabel termLabel = new JLabel("Term (in years):");
          private JTextField t = new JTextField(5);
          private JLabel rateLabel = new JLabel("Interest Rate:");
          private JTextField r = new JTextField(5);
          private JLabel paymentLabel = new JLabel("Payment:");
          private JTextField m = new JTextField(15);
          private JLabel displayPayment = new JLabel();

          //Construct Buttons
          private JButton calculateButton = new JButton("Calculate Payment");
          private JButton clearButton = new JButton("Clear");
          private JButton quitButton = new JButton ("Quit");


       public static void main(String[] args)
      {

      //Set look and feel for the interface
         try
         {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
         }

         catch (Exception e)
         {


            }
         MortgagePay f = new MortgagePay();

         f.setSize(450,350);
         f.setTitle("Mortgage Payment Calculator");
         f.setResizable(false);
         f.setLocation(200,200);
         f.setVisible(true);
      }

       public MortgagePay()
      {
          //Bulid Container
          Container c = getContentPane();
              c.setLayout((new BorderLayout()));
          fieldPanel.setLayout(new GridLayout(8,1));
          FlowLayout rowSetup = new FlowLayout(FlowLayout.LEFT,5,3);
               firstRow.setLayout(rowSetup);
               secondRow.setLayout(rowSetup);
               thirdRow.setLayout(rowSetup);
               fourthRow.setLayout(rowSetup);

          buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
          buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));



          //add fields to rows
          firstRow.add(loanLabel);
          firstRow.add(p);
          secondRow.add(termLabel);
          secondRow.add(t);
          thirdRow.add(rateLabel);
          thirdRow.add(r);
          fourthRow.add(paymentLabel);
          fourthRow.add(m);
          fourthRow.add(displayPayment);

          //Add rows to panel
          fieldPanel.add(firstRow);
          fieldPanel.add(secondRow);
          fieldPanel.add(thirdRow);
          fieldPanel.add(fourthRow);
          //add button to panel
          buttonPanel.add(calculateButton);
          buttonPanel.add(clearButton);
          buttonPanel.add(quitButton);

          //Add panels to frame
          c.add(fieldPanel, BorderLayout.CENTER);
          c.add(buttonPanel, BorderLayout.SOUTH);

          //add fuctionality to the button
          calculateButton.addActionListener(this);
          clearButton.addActionListener(this);
          quitButton.addActionListener(this);

     }

       public void actionPerformed(ActionEvent e)
      {
              Object source = e.getSource();


               if(source == clearButton)
                  {
                  p.setText(null);
                  t.setText(null);
                  r.setText(null);
                  m.setText(null);

                  }
               if(source == quitButton)
               {
                     System.exit(0);
               }


               //This is going to call the method for doing the math
               mortCal();


       }

        public void mortCal()
        {
      {
            if(p.getText().trim().length()==0||r.getText().trim().length()==0||t.getText().trim().length()==0)
            {
                  displayPayment.setText(null);
                  return;
            }


               double principle = Double.parseDouble(p.getText());
               double rate = Double.parseDouble(r.getText());
               double term = Double.parseDouble(t.getText());
               double interest = (rate/100/12);
               double payment = (principle*interest)/(1-Math.pow(1/(1+interest), term*12));
               displayPayment.setText("" + NumberFormat.getCurrencyInstance().format(payment));
               displayPayment.setText(null);
               }
               }
   }
0
 
LVL 10

Expert Comment

by:mukundha_expert
ID: 17158953
have you tried mine??

its working
0
 
LVL 23

Accepted Solution

by:
Ajay-Singh earned 1600 total points
ID: 17158961
>                double principle = Double.parseDouble(p.getText());
>                double rate = Double.parseDouble(r.getText());
>                double term = Double.parseDouble(t.getText());
>                double interest = (rate/100/12);
>                double payment = (principle*interest)/(1-Math.pow(1/(1+in<wbr/>terest),
> term*12));
>                displayPayment.setText("" +
> NumberFormat.getCurrencyInstance().forma<wbr/>t(payment)<wbr/>);
>                displayPayment.setText(null);


remove last line "displayPayment.setText(null);"
from this function
0

Featured Post

Build and deliver software with DevOps

A digital transformation requires faster time to market, shorter software development lifecycles, and the ability to adapt rapidly to changing customer demands. DevOps provides the solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Here is a helpful source code for C++ Builder programmers that allows you to manage and manipulate HTML content from C++ code, while also handling HTML events like onclick, onmouseover, ... Some objects defined and used in this source include: …
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
Suggested Courses

704 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question