Solved

GUI Java Mortgage Calculator

Posted on 2007-04-08
11
341 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
[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
  • 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
PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

 
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

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

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

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…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
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:
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

627 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