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)); } } }