1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4 import javax.swing.border.*;
5 import java.util.*;
6 import java.text.NumberFormat;
7
8 public class NumberFormatDemo extends JApplet {
9
10 private JComboBox jcboLocale = new JComboBox();
11
12
13 private JTextField jtfInterestRate = new JTextField("6.75");
14 private JTextField jtfNumberOfYears = new JTextField("15");
15 private JTextField jtfLoanAmount = new JTextField("107000");
16 private JTextField jtfFormattedInterestRate = new JTextField(10);
17 private JTextField jtfFormattedNumberOfYears = new JTextField(10);
18 private JTextField jtfFormattedLoanAmount = new JTextField(10);
19
20
21 private JTextField jtfTotalPayment = new JTextField();
22 private JTextField jtfMonthlyPayment = new JTextField();
23
24
25 private JButton jbtCompute = new JButton("Compute");
26
27
28 private Locale locale = Locale.getDefault();
29
30
31 private Locale locales[] = Calendar.getAvailableLocales();
32
33
34 public void initializeComboBox() {
35
36 for (int i = 0; i < locales.length; i++)
37 jcboLocale.addItem(locales[i].getDisplayName());
38 }
39
40
41 public void init() {
42
43 JPanel p1 = new JPanel();
44 p1.setLayout(new FlowLayout());
45 p1.add(jcboLocale);
46 initializeComboBox();
47 p1.setBorder(new TitledBorder("Choose a Locale"));
48
49
50 JPanel p2 = new JPanel();
51 p2.setLayout(new GridLayout(3, 3));
52 p2.add(new JLabel("Interest Rate"));
53 p2.add(jtfInterestRate);
54 p2.add(jtfFormattedInterestRate);
55 p2.add(new JLabel("Number of Years"));
56 p2.add(jtfNumberOfYears);
57 p2.add(jtfFormattedNumberOfYears);
58 p2.add(new JLabel("Loan Amount"));
59 p2.add(jtfLoanAmount);
60 p2.add(jtfFormattedLoanAmount);
61 p2.setBorder(new TitledBorder("Enter Annual Interest Rate, " +
62 "Number of Years, and Loan Amount"));
63
64
65 JPanel p3 = new JPanel();
66 p3.setLayout(new GridLayout(2, 2));
67 p3.setBorder(new TitledBorder("Payment"));
68 p3.add(new JLabel("Monthly Payment"));
69 p3.add(jtfMonthlyPayment);
70 p3.add(new JLabel("Total Payment"));
71 p3.add(jtfTotalPayment);
72
73
74 jtfFormattedInterestRate.setHorizontalAlignment(JTextField.RIGHT);
75 jtfFormattedNumberOfYears.setHorizontalAlignment(JTextField.RIGHT);
76 jtfFormattedLoanAmount.setHorizontalAlignment(JTextField.RIGHT);
77 jtfTotalPayment.setHorizontalAlignment(JTextField.RIGHT);
78 jtfMonthlyPayment.setHorizontalAlignment(JTextField.RIGHT);
79
80
81 jtfFormattedInterestRate.setEditable(false);
82 jtfFormattedNumberOfYears.setEditable(false);
83 jtfFormattedLoanAmount.setEditable(false);
84 jtfTotalPayment.setEditable(false);
85 jtfMonthlyPayment.setEditable(false);
86
87
88 JPanel p4 = new JPanel();
89 p4.setLayout(new BorderLayout());
90 p4.add(p3, BorderLayout.CENTER);
91 p4.add(jbtCompute, BorderLayout.SOUTH);
92
93
94 add(p1, BorderLayout.NORTH);
95 add(p2, BorderLayout.CENTER);
96 add(p4, BorderLayout.SOUTH);
97
98
99 jcboLocale.addActionListener(new ActionListener() {
100 @Override
101 public void actionPerformed(ActionEvent e) {
102 locale = locales[jcboLocale.getSelectedIndex()];
103 computeLoan();
104 }
105 });
106
107 jbtCompute.addActionListener(new ActionListener() {
108 @Override
109 public void actionPerformed(ActionEvent e) {
110 computeLoan();
111 }
112 });
113 }
114
115
116 private void computeLoan() {
117
118 double loan = new Double(jtfLoanAmount.getText()).doubleValue();
119 double interestRate =
120 new Double(jtfInterestRate.getText()).doubleValue() / 1240;
121 int numberOfYears =
122 new Integer(jtfNumberOfYears.getText()).intValue();
123
124
125 double monthlyPayment = loan * interestRate/
126 (1 - (Math.pow(1 / (1 + interestRate), numberOfYears * 12)));
127 double totalPayment = monthlyPayment * numberOfYears * 12;
128
129
130 NumberFormat percentFormatter =
131 NumberFormat.getPercentInstance(locale);
132 NumberFormat currencyForm =
133 NumberFormat.getCurrencyInstance(locale);
134 NumberFormat numberForm = NumberFormat.getNumberInstance(locale);
135 percentFormatter.setMinimumFractionDigits(2);
136
137
138 jtfFormattedInterestRate.setText(
139 percentFormatter.format(interestRate * 12));
140 jtfFormattedNumberOfYears.setText
141 (numberForm.format(numberOfYears));
142 jtfFormattedLoanAmount.setText(currencyForm.format(loan));
143
144
145 jtfMonthlyPayment.setText(currencyForm.format(monthlyPayment));
146 jtfTotalPayment.setText(currencyForm.format(totalPayment));
147 }
148
149
150 public static void main(String[] args) {
151
152 JFrame frame = new JFrame("NumberFormatDemo");
153
154
155 NumberFormatDemo applet = new NumberFormatDemo();
156
157
158 frame.getContentPane().add(applet, BorderLayout.CENTER);
159
160
161 applet.init();
162 applet.start();
163
164
165 frame.setSize(400, 300);
166 frame.setLocationRelativeTo(null);
167 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
168 frame.setVisible(true);
169 }
170 }