Buttons

So I have a program that works great, and it has default values in the text boxes.. I would like to have text boxes take input and have these be the default values in the text boxes. If you run the program you will see what I mean.. i would like the input from the first three text boxes to be the default values in the Mortgage calculation?

package components;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.text.*;

import java.beans.PropertyChangeListener;

import java.beans.PropertyChangeEvent;

import java.text.*;

import java.io.*;

import java.math.*;

public class FormattedTextFieldDemo extends JPanel

implements PropertyChangeListener {

{

String cond1;

double output1;

String cond2;

double output2;

String cond3;

double output3;

cond1 = JOptionPane.showInputDialog("Loan Amount");

output1 = Double.parseDouble(cond1);

cond2 = JOptionPane.showInputDialog("Interest Rate");

output2 = Double.parseDouble(cond2);

cond3 = JOptionPane.showInputDialog("Term");

output3 = Double.parseDouble(cond3);

JOptionPane.showMessageDialog(null,

output1,

"The Monthly Payment is",

JOptionPane.PLAIN_MESSAGE);

}

//Values for the fields

private double amount = 200000;

private double rate = 5.75;

private int numPeriods = 30;

//Labels to identify the fields

private JLabel amountLabel;

private JLabel rateLabel;

private JLabel numPeriodsLabel;

private JLabel paymentLabel;

//Strings for the labels

private static String amountString = " Loan Amount";

private static String rateString = "APR (%): ";

private static String numPeriodsString = "Years: ";

private static String paymentString = "Monthly Payment: ";

//Fields for data entry

private JFormattedTextField amountField;

private JFormattedTextField rateField;

private JFormattedTextField numPeriodsField;

private JFormattedTextField paymentField;

//Formats to format and parse numbers

private NumberFormat amountFormat;

private NumberFormat percentFormat;

private NumberFormat paymentFormat;

public FormattedTextFieldDemo() {

super(new BorderLayout());

setUpFormats();

double payment = computePayment(amount,

rate,

numPeriods);

//Create the labels.

amountLabel = new JLabel(amountString);

rateLabel = new JLabel(rateString);

numPeriodsLabel = new JLabel(numPeriodsString);

paymentLabel = new JLabel(paymentString);

//Create the text fields and set them up.

amountField = new JFormattedTextField(amountFormat);

amountField.setValue(new Double(amount));

amountField.setColumns(10);

amountField.addPropertyChangeListener("value", this);

rateField = new JFormattedTextField(percentFormat);

rateField.setValue(new Double(rate));

rateField.setColumns(10);

rateField.addPropertyChangeListener("value", this);

numPeriodsField = new JFormattedTextField();

numPeriodsField.setValue(new Integer(numPeriods));

numPeriodsField.setColumns(10);

numPeriodsField.addPropertyChangeListener("value", this);

paymentField = new JFormattedTextField(paymentFormat);

paymentField.setValue(new Double(payment));

paymentField.setColumns(10);

paymentField.setEditable(false);

paymentField.setForeground(Color.red);

//Tell accessibility tools about label/textfield pairs.

amountLabel.setLabelFor(amountField);

rateLabel.setLabelFor(rateField);

numPeriodsLabel.setLabelFor(numPeriodsField);

paymentLabel.setLabelFor(paymentField);

//Lay out the labels in a panel.

JPanel labelPane = new JPanel(new GridLayout(0,1));

labelPane.add(amountLabel);

labelPane.add(rateLabel);

labelPane.add(numPeriodsLabel);

labelPane.add(paymentLabel);

//Layout the text fields in a panel.

JPanel fieldPane = new JPanel(new GridLayout(0,1));

fieldPane.add(amountField);

fieldPane.add(rateField);

fieldPane.add(numPeriodsField);

fieldPane.add(paymentField);

//Put the panels in this panel, labels on left,

//text fields on right.

setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

add(labelPane, BorderLayout.CENTER);

add(fieldPane, BorderLayout.LINE_END);

}

/** Called when a field's "value" property changes. */

public void propertyChange(PropertyChangeEvent e) {

Object source = e.getSource();

if (source == amountField) {

amount = ((Number)amountField.getValue()).doubleValue();

} else if (source == rateField) {

rate = ((Number)rateField.getValue()).doubleValue();

} else if (source == numPeriodsField) {

numPeriods = ((Number)numPeriodsField.getValue()).intValue();

}

double payment = computePayment(amount, rate, numPeriods);

paymentField.setValue(new Double(payment));

}

/**

* Create the GUI and show

*/

private static void createAndShowGUI() {

//Create and set up the window.

JFrame frame = new JFrame("Week 2 Mortgage Calculator");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Add contents to the window.

frame.add(new FormattedTextFieldDemo());

//Display the window.

frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) {

//Schedule a job for the event dispatch thread:

//creating and showing this application's GUI.

SwingUtilities.invokeLater(new Runnable() {

public void run() {

//Turn off metal's use of bold fonts

UIManager.put("swing.boldMetal", Boolean.FALSE);

createAndShowGUI();

}

});

}

//Compute the monthly payment based on the loan amount,

//APR, and length of loan.

double computePayment(double loanAmt, double rate, int numPeriods) {

double I, partial1, denominator, answer;

numPeriods *= 12;//get number of months

if (rate > 0.01) {

I = rate / 100.0 / 12.0; //get monthly rate from annual

partial1 = Math.pow((1 + I), (0.0 - numPeriods));

denominator = (1 - partial1) / I;

} else { //rate ~= 0

denominator = numPeriods;

}

answer = (-1 * loanAmt) / denominator;

return answer;

}

//Create and set up number formats. These objects also

//parse numbers input by user.

private void setUpFormats() {

amountFormat = NumberFormat.getNumberInstance();

percentFormat = NumberFormat.getNumberInstance();

percentFormat.setMinimumFractionDigits(3);

paymentFormat = NumberFormat.getCurrencyInstance();

}

}

[6936 byte] By [greenbird38a] at [2007-11-27 3:00:34]
# 1

You get the values from the JOptionPanes, but you don't initialize them to your fields. I moved your first phase into initialize() block and there extracted the user input and set it to the global variables.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.text.*;

import java.beans.PropertyChangeListener;

import java.beans.PropertyChangeEvent;

import java.text.*;

import java.io.*;

import java.math.*;

public class FormattedTextFieldDemo extends JPanel implements

PropertyChangeListener {

private double amount = 200000;

private double rate = 5.75;

private int numPeriods = 30;

// Values for the fields

// Labels to identify the fields

private JLabel amountLabel;

private JLabel rateLabel;

private JLabel numPeriodsLabel;

private JLabel paymentLabel;

// Strings for the labels

private static String amountString = " Loan Amount";

private static String rateString = "APR (%): ";

private static String numPeriodsString = "Years: ";

private static String paymentString = "Monthly Payment: ";

// Fields for data entry

private JFormattedTextField amountField;

private JFormattedTextField rateField;

private JFormattedTextField numPeriodsField;

private JFormattedTextField paymentField;

// Formats to format and parse numbers

private NumberFormat amountFormat;

private NumberFormat percentFormat;

private NumberFormat paymentFormat;

public FormattedTextFieldDemo() {

super(new BorderLayout());

setUpFormats();

initializeValues();

double payment = computePayment(amount, rate, numPeriods);

// Create the labels.

amountLabel = new JLabel(amountString);

rateLabel = new JLabel(rateString);

numPeriodsLabel = new JLabel(numPeriodsString);

paymentLabel = new JLabel(paymentString);

// Create the text fields and set them up.

amountField = new JFormattedTextField(amountFormat);

amountField.setValue(new Double(amount));

amountField.setColumns(10);

amountField.addPropertyChangeListener("value", this);

rateField = new JFormattedTextField(percentFormat);

rateField.setValue(new Double(rate));

rateField.setColumns(10);

rateField.addPropertyChangeListener("value", this);

numPeriodsField = new JFormattedTextField();

numPeriodsField.setValue(new Integer(numPeriods));

numPeriodsField.setColumns(10);

numPeriodsField.addPropertyChangeListener("value", this);

paymentField = new JFormattedTextField(paymentFormat);

paymentField.setValue(new Double(payment));

paymentField.setColumns(10);

paymentField.setEditable(false);

paymentField.setForeground(Color.red);

// Tell accessibility tools about label/textfield pairs.

amountLabel.setLabelFor(amountField);

rateLabel.setLabelFor(rateField);

numPeriodsLabel.setLabelFor(numPeriodsField);

paymentLabel.setLabelFor(paymentField);

// Lay out the labels in a panel.

JPanel labelPane = new JPanel(new GridLayout(0, 1));

labelPane.add(amountLabel);

labelPane.add(rateLabel);

labelPane.add(numPeriodsLabel);

labelPane.add(paymentLabel);

// Layout the text fields in a panel.

JPanel fieldPane = new JPanel(new GridLayout(0, 1));

fieldPane.add(amountField);

fieldPane.add(rateField);

fieldPane.add(numPeriodsField);

fieldPane.add(paymentField);

// Put the panels in this panel, labels on left,

// text fields on right.

setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

add(labelPane, BorderLayout.CENTER);

add(fieldPane, BorderLayout.LINE_END);

}

private void initializeValues() {

String cond1;

double output1;

String cond2;

double output2;

String cond3;

double output3;

cond1 = JOptionPane.showInputDialog("Loan Amount");

output1 = Double.parseDouble(cond1);

amount = output1;

cond2 = JOptionPane.showInputDialog("Interest Rate");

output2 = Double.parseDouble(cond2);

rate = output2;

cond3 = JOptionPane.showInputDialog("Term");

output3 = Double.parseDouble(cond3);

numPeriods = (int) output3;

JOptionPane.showMessageDialog(null, output1, "The Monthly Payment is",

JOptionPane.PLAIN_MESSAGE);

}

/** Called when a field's "value" property changes. */

public void propertyChange(PropertyChangeEvent e) {

Object source = e.getSource();

if (source == amountField) {

amount = ((Number) amountField.getValue()).doubleValue();

} else if (source == rateField) {

rate = ((Number) rateField.getValue()).doubleValue();

} else if (source == numPeriodsField) {

numPeriods = ((Number) numPeriodsField.getValue()).intValue();

}

double payment = computePayment(amount, rate, numPeriods);

paymentField.setValue(new Double(payment));

}

/**

* Create the GUI and show

*/

private static void createAndShowGUI() {

// Create and set up the window.

JFrame frame = new JFrame("Week 2 Mortgage Calculator");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Add contents to the window.

frame.add(new FormattedTextFieldDemo());

// Display the window.

frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) {

// Schedule a job for the event dispatch thread:

// creating and showing this application's GUI.

SwingUtilities.invokeLater(new Runnable() {

public void run() {

// Turn off metal's use of bold fonts

UIManager.put("swing.boldMetal", Boolean.FALSE);

createAndShowGUI();

}

});

}

// Compute the monthly payment based on the loan amount,

// APR, and length of loan.

double computePayment(double loanAmt, double rate, int numPeriods) {

double I, partial1, denominator, answer;

numPeriods *= 12; // get number of months

if (rate > 0.01) {

I = rate / 100.0 / 12.0; // get monthly rate from annual

partial1 = Math.pow((1 + I), (0.0 - numPeriods));

denominator = (1 - partial1) / I;

} else { // rate ~= 0

denominator = numPeriods;

}

answer = (-1 * loanAmt) / denominator;

return answer;

}

// Create and set up number formats. These objects also

// parse numbers input by user.

private void setUpFormats() {

amountFormat = NumberFormat.getNumberInstance();

percentFormat = NumberFormat.getNumberInstance();

percentFormat.setMinimumFractionDigits(3);

paymentFormat = NumberFormat.getCurrencyInstance();

}

}

nofearinca at 2007-7-12 3:41:47 > top of Java-index,Desktop,Core GUI APIs...
# 2
So does this run as is? I am not near a compiler.. Does it take the input from the user and put it in the calculation for the mortgage?
greenbird38a at 2007-7-12 3:41:47 > top of Java-index,Desktop,Core GUI APIs...
# 3
It takes the input and assigns it to the variables that you declared for the next calculations. If I got your point correct, it has to work the way you want to.
nofearinca at 2007-7-12 3:41:47 > top of Java-index,Desktop,Core GUI APIs...
# 4
I just ran the program.. It works perfectly.. Thanks a bunch... WOOOOHOOO
greenbird38a at 2007-7-12 3:41:47 > top of Java-index,Desktop,Core GUI APIs...
# 5
How hard would it be to put combo boxes, instead of texboxes. allowing the user to pick from a 7 year at 5.35%, 15 year at 5.5 %, and 30 year at 5.75%
greenbird38a at 2007-7-12 3:41:47 > top of Java-index,Desktop,Core GUI APIs...