-
Help
I cannot figure out how to get the radio buttons to work. I am trying to get the user to put in the principle balance then then can select a button for their options on rate and term. I am also having problem getting the amortization table to work. Any suggestions?
Code:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
public class mortgageCalculatorMcCabe3 extends JFrame implements ActionListener {
int term = 0;
double principal = 0;
double rate = 0;
double monthlyPayment = 0;
double interest = 0;
String mTerm[] = {"7", "15", "30"};
String mInterst[] = {"5.35%", "5.50%", "5.75%"};
JPanel row1 = new JPanel();
JLabel mortgage_label = new JLabel("Mortgage Payment Calculator", JLabel.CENTER);
JPanel row2 = new JPanel(new GridLayout(1, 2));
JLabel principal_label = new JLabel("Loan Amount: $",JLabel.LEFT);
JTextField principal_txt = new JTextField(10);
JPanel row3 = new JPanel(new GridLayout(1, 2));
JLabel term_label = new JLabel("Term of Loan(Years):",JLabel.LEFT);
JTextField term_txt = new JTextField(10);
JPanel row4 = new JPanel(new GridLayout(1, 2));
JLabel rate_label = new JLabel("Interest Rate:", JLabel.LEFT);
JTextField rate_txt = new JTextField(10);
JPanel radioPanel = new JPanel();
JRadioButton button_A = new JRadioButton("7 Years at 5.35%" , false);
JRadioButton button_B = new JRadioButton("15 Years at 5.50%" , false);
JRadioButton button_C = new JRadioButton("30 Years at 5.75%", false);
JPanel row5 = new JPanel(new GridLayout(1, 2));
JLabel payment_label = new JLabel("Total Monthly Payment: $", JLabel.LEFT);
JTextField payment_txt = new JTextField(10);
//***************create buttons***************
JPanel button = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
JButton clearButton = new JButton("Clear");
JButton exitButton = new JButton("Exit");
JButton calculateButton = new JButton("Calculate");
//***************set text area to diplay payments***************
JTextArea displayArea = new JTextArea(10, 45);
JScrollPane scroll = new JScrollPane(displayArea);
public mortgageCalculatorMcCabe3()
{
super ("Ryan's Mortgage Calculator");
setSize(550, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = getContentPane();
Border rowborder = new EmptyBorder( 3, 10, 3, 10 );
pane.add(row1);
row1.add(mortgage_label);
row1.setMaximumSize( new Dimension( 10000, row1.getMinimumSize().height));
row1.setBorder( rowborder);
pane.add(row2);
row2.add(principal_label);
row2.add(principal_txt);
row2.setMaximumSize( new Dimension( 10000, row2.getMinimumSize().height));
row2.setBorder( rowborder);
pane.add(row3);
row3.add(term_label);
row3.add(term_txt);
row3.setMaximumSize( new Dimension( 10000, row3.getMinimumSize().height));
row3.setBorder( rowborder);
pane.add(row4);
row4.add(rate_label);
row4.add(rate_txt);
row4.setMaximumSize( new Dimension( 10000, row4.getMinimumSize().height));
row4.setBorder( rowborder);
ButtonGroup bgroup = new ButtonGroup();
bgroup.add(button_A);
bgroup.add(button_B);
bgroup.add(button_C);
radioPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 4 ));
radioPanel.add(button_A);
radioPanel.add(button_B);
radioPanel.add(button_C);
pane.add(radioPanel);
radioPanel.setMaximumSize( new Dimension( 10000, radioPanel.getMinimumSize().height));
radioPanel.setBorder( rowborder);
pane.add(row5);
row5.add(payment_label);
row5.add(payment_txt);
payment_txt.setEnabled(false); //set payment amount as not editable
row5.setMaximumSize( new Dimension( 10000, row5.getMinimumSize().height));
row5.setBorder( rowborder);
button.add(calculateButton);
button.add(clearButton);
button.add(exitButton);
pane.add(button);
button.setMaximumSize( new Dimension( 10000, button.getMinimumSize().height));
scroll.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
pane.add(scroll);
pane.setLayout(new BoxLayout( pane, BoxLayout.Y_AXIS));
setVisible(true);
setContentPane(pane);
//***************add listeners***************
clearButton.addActionListener(this);
exitButton.addActionListener(this);
calculateButton.addActionListener(this);
button_A.addActionListener(this);
button_B.addActionListener(this);
button_C.addActionListener(this);
}
public void actionPerformed(ActionEvent event){
Object command = event.getSource();
if(command == calculateButton)
{
try
{
Payment();
}
catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null, "Invaild Entry! Please Try Again", "ERROR", JOptionPane.ERROR_MESSAGE);
}
}
//**********Set rate and term based on which item in the combobox is selected**********
if(button_A.isSelected() == true)
try
{
Payment();
rate = 5.35;
term = 7;
}
if(button_B.isSelected() == true)
try
{
Payment();
rate = 5.5;
term = 15;
}
if (button_C.isSelected() == true)
try
{
Payment();
rate = 5.75;
term = 30;
}
catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null, "Invaild Entry! Please Try Again", "ERROR", JOptionPane.ERROR_MESSAGE);
}
if(command == clearButton)
{
principal_txt.setText(null);
term_txt.setText(null);
rate_txt.setText(null);
payment_txt.setText(null);
displayArea.setText(null);
}
if(command == exitButton)
{
System.exit(0);
}
}
//***************payment calculation*****************
public void Payment()
{
double principal = Double.parseDouble(principal_txt.getText()); //Principal amount
float rate1 = Float.parseFloat((String)rate_txt.getText()); //Interest rate
double rate = rate1/100;
int term = Integer.parseInt((String)term_txt.getText()); //Length of Loan in Years
double perMonthRate = rate/12; //Monthly interest rate
double termMonths = term*12; //Number of months over which loan is amortized
//*************calculation formula********************
double monthlyPayment = principal * (perMonthRate/(1 - Math.pow((1 + perMonthRate),(-termMonths))));
/*formatting variables*/
DecimalFormat df = new DecimalFormat("\u00A4#,##0.00"); //currency
DecimalFormat pf = new DecimalFormat("#,##0.00%"); //percentages
DecimalFormat mi = new DecimalFormat("#,##0.000%"); //percentages
payment_txt.setText("" + df.format(monthlyPayment));
/*Amoritization variables*/
double interestPaid = 0; /*Amount of interest paid on the loan*/
double monthlyPrincipal = 0; /*Amount of principal in each monthly payment*/
double principalBalance = principal; /*runing total of principal after payment*/
int paymentNumber = 1; //Variable used to set payment number.
/*This loop increments the term length in years.*/
for(int y = 1; y <= term; y++)
{ //start outer loop
displayArea.append(""); //Inserts a blank line
/*This loop is used to calculate and display the payment schedule
information.*/
for (int m = 0; m<12; m++)
{ /*start inner loop*/
interestPaid = principalBalance*perMonthRate;
monthlyPrincipal = monthlyPayment-interestPaid;
principalBalance = principalBalance - monthlyPrincipal;
displayArea.append("Month");
df.format(monthlyPrincipal);
df.format(interestPaid);
df.format(principalBalance);
paymentNumber++;
displayArea.setCaretPosition(0);
}
}
}
public static void main(String[] arguments) {
mortgageCalculatorMcCabe3 mortgageCalculatorMcCabe3 = new mortgageCalculatorMcCabe3();
}
}
Last edited by Hack; 03-03-2009 at 08:42 AM.
Reason: Added Code Tags
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Development Centers
-- Android Development Center
-- Cloud Development Project Center
-- HTML5 Development Center
-- Windows Mobile Development Center
|