Swing
						Application
						Future Value Calculator application
                    
                The panels of the user interface for the Future Value Calculator application
 
The Future Value Calculator application
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
public class FutureValueApp
{
    public static void main(String[] args)
    {
        JFrame frame = new FutureValueFrame();
        frame.setVisible(true);
    }
}
class FutureValueFrame extends JFrame
{
    public FutureValueFrame()
    {
        setTitle("Future Value Calculator");
        setSize(267, 200);
        centerWindow(this);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new FutureValuePanel();
        this.add(panel);
    }
    private void centerWindow(Window w)
    {
        Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension d = tk.getScreenSize();
        setLocation((d.width-w.getWidth())/2,
            (d.height-w.getHeight())/2);
    }
}
class FutureValuePanel extends JPanel implements ActionListener
{
    private JTextField  paymentTextField,
                        rateTextField,
                        yearsTextField,
                        futureValueTextField;
    private JLabel      paymentLabel,
                        rateLabel,
                        yearsLabel,
                        futureValueLabel;
    private JButton     calculateButton,
                        exitButton;
    public FutureValuePanel()
    {
        // display panel
        JPanel displayPanel = new JPanel();
        displayPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
		// payment label
        paymentLabel = new JLabel("Monthly Payment:");
        displayPanel.add(paymentLabel);
        // payment text field
        paymentTextField = new JTextField(10);
        displayPanel.add(paymentTextField);
        // rate label
        rateLabel = new JLabel("Yearly Interest Rate:");
        displayPanel.add(rateLabel);
        // rate text field
        rateTextField = new JTextField(10);
        displayPanel.add(rateTextField);
        // years label
        yearsLabel = new JLabel("Number of Years:");
        displayPanel.add(yearsLabel);
        // years text field
        yearsTextField = new JTextField(10);
        displayPanel.add(yearsTextField);
        // future value label
        futureValueLabel = new JLabel("Future Value:");
        displayPanel.add(futureValueLabel);
        // future value text field
        futureValueTextField = new JTextField(10);
        futureValueTextField.setEditable(false);
        futureValueTextField.setFocusable(false);
        displayPanel.add(futureValueTextField);
        // button panel
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(
            new FlowLayout(FlowLayout.RIGHT));
        // calculate button
        calculateButton = new JButton("Calculate");
        calculateButton.addActionListener(this);
        buttonPanel.add(calculateButton);
        // exit button
        exitButton = new JButton("Exit");
        exitButton.addActionListener(this);
        buttonPanel.add(exitButton);
        // add panels to main panel
        this.setLayout(new BorderLayout());
        this.add(displayPanel, BorderLayout.CENTER);
        this.add(buttonPanel, BorderLayout.SOUTH);
    }
    public void actionPerformed(ActionEvent e)
    {   Object source = e.getSource();
        if (source == exitButton)
            System.exit(0);
        else if (source == calculateButton)
        {   double payment = Double.parseDouble(
                paymentTextField.getText());
            double rate = Double.parseDouble(
                rateTextField.getText());
            int years = Integer.parseInt(
                yearsTextField.getText());
            double futureValue =
                FinancialCalculations.calculateFutureValue(
                payment, rate, years);
            NumberFormat currency =
                NumberFormat.getCurrencyInstance();
            futureValueTextField.setText(
                currency.format(futureValue));
        }
    }
}