Solved

GUI Java Mortgage Calculator

Posted on 2007-04-08
11
332 Views
Last Modified: 2011-10-03
Ok folks,
I have submitted this before and decided to play and modify it again. I have added an exit button to it and it seems I did everything correctly. But, there's always a but, I can't see the exit button in the window when I run it. can someone please help me find out what in the world I forgot. Maybe it is to many kids and easter candu but I am at a loss. Please any help would be great!!!! Thanks in advance.


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



   public class MortgageCalculator2 extends JApplet {
     JLabel label_1;
     JLabel label_2;
     JLabel label_3;
     JTextField textfield_1;
     JTextField textfield_2;
     JTextField textfield_3;
     JButton calculate;
     JLabel label_4;
     JButton start_Over;
     JLabel label_5;
     JButton exit_Exit;
     JLabel label_6;

 public static void main(String args[]) {

        JFrame f = new JFrame("Mortgage Loan Calculator");
        MortgageCalculator2 calc = new MortgageCalculator2();
        f.getContentPane().add(calc);
        calc.init();
        f.pack();
        f.setVisible(true);

 }
    public void init() {
        MortgageCalculator2Layout customLayout = new MortgageCalculator2Layout();

        Container con = getContentPane();
        con.setFont(new Font("Helvetica", Font.PLAIN, 12));
        con.setLayout(customLayout);

        label_1 = new JLabel("Loan Amount");
        con.add(label_1);

        label_2 = new JLabel("Interest Rate");
        con.add(label_2);

        label_3 = new JLabel("Term");
        con.add(label_3);

        textfield_1 = new JTextField("");
        con.add(textfield_1);

        textfield_2 = new JTextField("");
        con.add(textfield_2);

        textfield_3 = new JTextField("");
        con.add(textfield_3);

        JButton calculate = new JButton("Calculate");
        con.add(calculate);

        label_4 = new JLabel("Payment");
        con.add(label_4);

        JButton start_Over = new JButton("Start Over");
        con.add(start_Over);

        label_5 = new JLabel("$ ");
        con.add(label_5);

        JButton exit_Exit = new JButton("Exit");
            con.add(exit_Exit);

            label_6 = new JLabel("Exit");
        con.add(label_6);

        setSize(getPreferredSize());


    //Add listener to "Calculate" button
    calculate.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent h)
    {
        // Initialize variables
        double amount = Double.parseDouble(textfield_1.getText());
        double irate = Double.parseDouble(textfield_2.getText());
        irate=irate/100;
        double term = Double.parseDouble(textfield_3.getText());

        //Equation for calculation of monthly payment
        double payment=Math.round((amount*irate/12*Math.pow(irate/12+1,term*12))/(Math.pow(irate/12+1,term*12)-1));

        label_5.setText("$ "+payment);

    }
    });
        //Add listener to "Start Over" button
        start_Over.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent h)
        {
        textfield_1.setText("");
        textfield_2.setText("");
        textfield_3.setText("");

        label_5.setText("$");
     }
     });

        //Add listener to "Exit" button
             exit_Exit.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent h)
     {
            textfield_1.setText("");
            textfield_2.setText("");
        textfield_3.setText("");

            label_5.setText("$");
            label_6.setText("");
    }
    });

}

class MortgageCalculator2Layout implements LayoutManager {

    public MortgageCalculator2Layout() {
    }

    public void addLayoutComponent(String name, Component comp) {
    }

    public void removeLayoutComponent(Component comp) {
    }

    public Dimension preferredLayoutSize(Container parent) {
        Dimension dim = new Dimension(0, 0);

        Insets insets = parent.getInsets();
        dim.width = 539 + insets.left + insets.right;
        dim.height = 394 + insets.top + insets.bottom;

        return dim;
    }

    public Dimension minimumLayoutSize(Container parent) {
        Dimension dim = new Dimension(0, 0);
        return dim;
    }

    public void layoutContainer(Container parent) {
        Insets insets = parent.getInsets();

        Component c;
        c = parent.getComponent(0);
        if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+8,96,24);}
        c = parent.getComponent(1);
        if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+40,96,24);}
        c = parent.getComponent(2);
        if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+72,96,24);}
        c = parent.getComponent(3);
        if (c.isVisible()) {c.setBounds(insets.left+112,insets.top+8,112,24);}
        c = parent.getComponent(4);
        if (c.isVisible()) {c.setBounds(insets.left+112,insets.top+40,112,24);}
        c = parent.getComponent(5);
        if (c.isVisible()) {c.setBounds(insets.left+112,insets.top+72,112,24);}
        c = parent.getComponent(6);
        if (c.isVisible()) {c.setBounds(insets.left+112,insets.top+104,112,24);}
        c = parent.getComponent(7);
        if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+136,96,24);}
        c = parent.getComponent(8);
        if (c.isVisible()) {c.setBounds(insets.left+112,insets.top+192,112,24);}
        c = parent.getComponent(9);
        if (c.isVisible()) {c.setBounds(insets.left+112,insets.top+136,72,24);}
    }

}
}
0
Comment
Question by:drisden1
  • 5
  • 3
  • 3
11 Comments
 
LVL 24

Expert Comment

by:sciuriware
ID: 18873175
Do not add the components to a Container, but to a JPanel, which in turn is added to the Container.

More or less independent of this, replace:

    setSize(getPreferredSize());

by:

    pack();

;JOOP!
0
 
LVL 12

Accepted Solution

by:
keyurkarnik earned 500 total points
ID: 18873286
Here is the solution to your problem :


public void init()
   {
      MortgageCalculator2Layout customLayout = new MortgageCalculator2Layout();

      Container con = getContentPane();
      con.setFont(new Font("Helvetica", Font.PLAIN, 12));
      con.setLayout(customLayout);

      label_1 = new JLabel("Loan Amount");
      con.add(label_1);

      label_2 = new JLabel("Interest Rate");
      con.add(label_2);

      label_3 = new JLabel("Term");
      con.add(label_3);

      textfield_1 = new JTextField("");
      con.add(textfield_1);

      textfield_2 = new JTextField("");
      con.add(textfield_2);

      textfield_3 = new JTextField("");
      con.add(textfield_3);

      calculate = new JButton("Calculate");
      con.add(calculate);

      label_4 = new JLabel("Payment");
      con.add(label_4);

      start_Over = new JButton("Start Over");
      con.add(start_Over);

      label_5 = new JLabel("$ ");
      con.add(label_5);

      exit_Exit = new JButton("Exit1");
      con.add(exit_Exit);

      label_6 = new JLabel("Exit");
      con.add(label_6);

      setSize(getPreferredSize());



You have created local variables for Exit and others whereas you also have class variables declared. Change all to class variables as shown above.




Now here is what is preventing the Exit button from being displayed :


You have implemented the public void layoutContainer(Container parent) method - but in this you have added only 10 entries

Your exit button is your eleventh component, for which you need another entry in the public void layoutContainer.


Add this in the layout container at the bottom :

c = parent.getComponent(10);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 220, 112, 24);
         }
0
 
LVL 12

Expert Comment

by:keyurkarnik
ID: 18873289
Though sciuri has given you good advice, thats not the issue you are facing - the issue is because you have not set the layoutContainer correctly.
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 12

Expert Comment

by:keyurkarnik
ID: 18873299
As you have already done all the code, I am pasting in the working version of the code as per my above comments

Make sure you implement the Exit action listener correctly
0
 
LVL 12

Expert Comment

by:keyurkarnik
ID: 18873301
package test;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class MG1 extends JApplet
{
   JLabel label_1;
   JLabel label_2;
   JLabel label_3;
   JTextField textfield_1;
   JTextField textfield_2;
   JTextField textfield_3;
   JButton calculate;
   JLabel label_4;
   JButton start_Over;
   JLabel label_5;
   JButton exit_Exit;
   JLabel label_6;

   public static void main(String args[])
   {

      JFrame f = new JFrame("Mortgage Loan Calculator");
      MG1 calc = new MG1();
      f.getContentPane().add(calc);
      calc.init();
      f.pack();
      f.setVisible(true);

   }
   public void init()
   {
      MortgageCalculator2Layout customLayout = new MortgageCalculator2Layout();

      Container con = getContentPane();
      con.setFont(new Font("Helvetica", Font.PLAIN, 12));
      con.setLayout(customLayout);

      label_1 = new JLabel("Loan Amount");
      con.add(label_1);

      label_2 = new JLabel("Interest Rate");
      con.add(label_2);

      label_3 = new JLabel("Term");
      con.add(label_3);

      textfield_1 = new JTextField("");
      con.add(textfield_1);

      textfield_2 = new JTextField("");
      con.add(textfield_2);

      textfield_3 = new JTextField("");
      con.add(textfield_3);

      calculate = new JButton("Calculate");
      con.add(calculate);

      label_4 = new JLabel("Payment");
      con.add(label_4);

      start_Over = new JButton("Start Over");
      con.add(start_Over);

      label_5 = new JLabel("$ ");
      con.add(label_5);

      exit_Exit = new JButton("Exit");
      con.add(exit_Exit);

      label_6 = new JLabel("Exit");
      con.add(label_6);

      setSize(getPreferredSize());


      //Add listener to "Calculate" button
      calculate.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent h)
         {
            // Initialize variables
            double amount = Double.parseDouble(textfield_1.getText());
            double irate = Double.parseDouble(textfield_2.getText());
            irate = irate / 100;
            double term = Double.parseDouble(textfield_3.getText());

            //Equation for calculation of monthly payment
            double payment = Math.round((amount * irate / 12 * Math.pow(irate / 12 + 1, term * 12)) / (Math.pow(irate / 12 + 1, term * 12) - 1));

            label_5.setText("$ " + payment);

         }
      });
      //Add listener to "Start Over" button
      start_Over.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent h)
         {
            textfield_1.setText("");
            textfield_2.setText("");
            textfield_3.setText("");

            label_5.setText("$");
         }
      });

      //Add listener to "Exit" button
      exit_Exit.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent h)
         {
            textfield_1.setText("");
            textfield_2.setText("");
            textfield_3.setText("");

            label_5.setText("$");
         }
      });

   }

   class MortgageCalculator2Layout implements LayoutManager
   {

      public MortgageCalculator2Layout()
      {
      }

      public void addLayoutComponent(String name, Component comp)
      {
      }

      public void removeLayoutComponent(Component comp)
      {
      }

      public Dimension preferredLayoutSize(Container parent)
      {
         Dimension dim = new Dimension(0, 0);

         Insets insets = parent.getInsets();
         dim.width = 539 + insets.left + insets.right;
         dim.height = 394 + insets.top + insets.bottom;

         return dim;
      }

      public Dimension minimumLayoutSize(Container parent)
      {
         Dimension dim = new Dimension(0, 0);
         return dim;
      }

      public void layoutContainer(Container parent)
      {
         Insets insets = parent.getInsets();

         Component c;
         c = parent.getComponent(0);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 8, 96, 24);
         }
         c = parent.getComponent(1);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 40, 96, 24);
         }
         c = parent.getComponent(2);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 72, 96, 24);
         }
         c = parent.getComponent(3);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 8, 112, 24);
         }
         c = parent.getComponent(4);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 40, 112, 24);
         }
         c = parent.getComponent(5);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 72, 112, 24);
         }
         c = parent.getComponent(6);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 104, 112, 24);
         }
         c = parent.getComponent(7);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 136, 96, 24);
         }
         c = parent.getComponent(8);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 192, 112, 24);
         }
         c = parent.getComponent(9);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 136, 72, 24);
         }
         c = parent.getComponent(10);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 220, 112, 24);
         }
         
         c = parent.getComponent(11);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 220, 112, 24);
         }
         
      }

   }
}
0
 

Author Comment

by:drisden1
ID: 18873555
keyurkarnik,
Got it and I see what I forgot.....but here is a question. The exit button only clears the solution not exit the program. What did I forget?
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 18874408
   //Add listener to "Exit" button
      exit_Exit.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent h)
         {
            textfield_1.setText("");
            textfield_2.setText("");
            textfield_3.setText("");

            label_5.setText("$");
            System.exit(0);             //            THIS !!
         }
      });

;JOOP!
0
 

Author Comment

by:drisden1
ID: 18875020
sciuriware,
Thanks for the suggestion but it does not exit the program, all it does is clear the inputs. Here is the revised code with all suggestions:


import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class MortgageCalculator2 extends JApplet
{
   JLabel label_1;
   JLabel label_2;
   JLabel label_3;
   JTextField textfield_1;
   JTextField textfield_2;
   JTextField textfield_3;
   JButton calculate;
   JLabel label_4;
   JButton start_Over;
   JLabel label_5;
   JButton exit_Exit;
   JLabel label_6;

   public static void main(String args[])
   {

      JFrame f = new JFrame("Mortgage Loan Calculator");
      MG1 calc = new MG1();
      f.getContentPane().add(calc);
      calc.init();
      f.pack();
      f.setVisible(true);

   }
   public void init()
   {
      MortgageCalculator2Layout customLayout = new MortgageCalculator2Layout();

      Container con = getContentPane();
      con.setFont(new Font("Helvetica", Font.PLAIN, 12));
      con.setLayout(customLayout);

      label_1 = new JLabel("Loan Amount");
      con.add(label_1);

      label_2 = new JLabel("Interest Rate");
      con.add(label_2);

      label_3 = new JLabel("Term");
      con.add(label_3);

      textfield_1 = new JTextField("");
      con.add(textfield_1);

      textfield_2 = new JTextField("");
      con.add(textfield_2);

      textfield_3 = new JTextField("");
      con.add(textfield_3);

      calculate = new JButton("Calculate");
      con.add(calculate);

      label_4 = new JLabel("Payment");
      con.add(label_4);

      start_Over = new JButton("Start Over");
      con.add(start_Over);

      label_5 = new JLabel("$ ");
      con.add(label_5);

      exit_Exit = new JButton("Exit");
      con.add(exit_Exit);

      label_6 = new JLabel("Exit");
      con.add(label_6);

      setSize(getPreferredSize());


      //Add listener to "Calculate" button
      calculate.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent h)
         {
            // Initialize variables
            double amount = Double.parseDouble(textfield_1.getText());
            double irate = Double.parseDouble(textfield_2.getText());
            irate = irate / 100;
            double term = Double.parseDouble(textfield_3.getText());

            //Equation for calculation of monthly payment
            double payment = Math.round((amount * irate / 12 * Math.pow(irate / 12 + 1, term * 12)) / (Math.pow(irate / 12 + 1, term * 12) - 1));

            label_5.setText("$ " + payment);

         }
      });
      //Add listener to "Start Over" button
      start_Over.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent h)
         {
            textfield_1.setText("");
            textfield_2.setText("");
            textfield_3.setText("");

            label_5.setText("$");
         }
      });

      //Add listener to "Exit" button
              exit_Exit.addActionListener(new ActionListener()
              {
                 public void actionPerformed(ActionEvent h)
                 {
                    textfield_1.setText("");
                    textfield_2.setText("");
                    textfield_3.setText("");

                    label_6.setText("");
                    System.exit(6);
                 }
              });

   }

   class MortgageCalculator2Layout implements LayoutManager
   {

      public MortgageCalculator2Layout()
      {
      }

      public void addLayoutComponent(String name, Component comp)
      {
      }

      public void removeLayoutComponent(Component comp)
      {
      }

      public Dimension preferredLayoutSize(Container parent)
      {
         Dimension dim = new Dimension(0, 0);

         Insets insets = parent.getInsets();
         dim.width = 539 + insets.left + insets.right;
         dim.height = 394 + insets.top + insets.bottom;

         return dim;
      }

      public Dimension minimumLayoutSize(Container parent)
      {
         Dimension dim = new Dimension(0, 0);
         return dim;
      }

      public void layoutContainer(Container parent)
      {
         Insets insets = parent.getInsets();

         Component c;
         c = parent.getComponent(0);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 8, 96, 24);
         }
         c = parent.getComponent(1);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 40, 96, 24);
         }
         c = parent.getComponent(2);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 72, 96, 24);
         }
         c = parent.getComponent(3);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 8, 112, 24);
         }
         c = parent.getComponent(4);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 40, 112, 24);
         }
         c = parent.getComponent(5);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 72, 112, 24);
         }
         c = parent.getComponent(6);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 104, 112, 24);
         }
         c = parent.getComponent(7);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 136, 96, 24);
         }
         c = parent.getComponent(8);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 192, 112, 24);
         }
         c = parent.getComponent(9);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 136, 72, 24);
         }
         c = parent.getComponent(10);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 112, insets.top + 220, 112, 24);
         }

         c = parent.getComponent(11);
         if (c.isVisible())
         {
            c.setBounds(insets.left + 8, insets.top + 220, 112, 24);
         }

      }

   }
}
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 18875038
Sorry, System.exit() doesn't work for an Applet.
0
 

Author Comment

by:drisden1
ID: 18876310
sciuriware,
So, is it possible to use an exit command in this program or do I have to change everything? I've tried a few things and nothing seems to work.
0
 
LVL 12

Expert Comment

by:keyurkarnik
ID: 18881755
http://forum.java.sun.com/thread.jspa?threadID=329456&messageID=2970381

Try this, or just set the visible attribute to false or something. You cannot call system.exit thats for sure
0

Featured Post

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
eclipse shortcuts 9 62
How to convert String matching to regex in java 4 48
hibernate example issues from command prompt 10 50
Java class and jar 3 19
An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…

766 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