import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import java.text.NumberFormat;
public class ResourceBundleDemo extends JApplet {
private JComboBox jcboLocale = new JComboBox();
private ResourceBundle res = ResourceBundle.getBundle("MyResource");
private JLabel jlblInterestRate =
new JLabel(res.getString("Annual_Interest_Rate"));
private JLabel jlblNumberOfYears =
new JLabel(res.getString("Number_Of_Years"));
private JLabel jlblLoanAmount =
new JLabel(res.getString("Loan_Amount"));
private JLabel jlblMonthlyPayment =
new JLabel(res.getString("Monthly_Payment"));
private JLabel jlblTotalPayment =
new JLabel(res.getString("Total_Payment"));
private TitledBorder comboBoxTitle =
new TitledBorder(res.getString("Choose_a_Locale"));
private TitledBorder inputTitle = new TitledBorder
(res.getString("Enter_Interest_Rate"));
private TitledBorder paymentTitle =
new TitledBorder(res.getString("Payment"));
private JTextField jtfInterestRate = new JTextField("6.75");
private JTextField jtfNumberOfYears = new JTextField("15");
private JTextField jtfLoanAmount = new JTextField("107000");
private JTextField jtfFormattedInterestRate = new JTextField(10);
private JTextField jtfFormattedNumberOfYears = new JTextField(10);
private JTextField jtfFormattedLoanAmount = new JTextField(10);
private JTextField jtfTotalPayment = new JTextField();
private JTextField jtfMonthlyPayment = new JTextField();
private JButton jbtCompute = new JButton(res.getString("Compute"));
private Locale locale = Locale.getDefault();
private Locale locales[] = Calendar.getAvailableLocales();
public void initializeComboBox() {
for (int i = 0; i < locales.length; i++)
jcboLocale.addItem(locales[i].getDisplayName());
}
public void init() {
JPanel p1 = new JPanel();
p1.setLayout(new FlowLayout());
p1.add(jcboLocale);
initializeComboBox();
p1.setBorder(comboBoxTitle);
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(3, 3));
p2.add(jlblInterestRate);
p2.add(jtfInterestRate);
p2.add(jtfFormattedInterestRate);
p2.add(jlblNumberOfYears);
p2.add(jtfNumberOfYears);
p2.add(jtfFormattedNumberOfYears);
p2.add(jlblLoanAmount);
p2.add(jtfLoanAmount);
p2.add(jtfFormattedLoanAmount);
p2.setBorder(inputTitle);
JPanel p3 = new JPanel();
p3.setLayout(new GridLayout(2, 2));
p3.setBorder(paymentTitle);
p3.add(jlblMonthlyPayment);
p3.add(jtfMonthlyPayment);
p3.add(jlblTotalPayment);
p3.add(jtfTotalPayment);
jtfFormattedInterestRate.setHorizontalAlignment
(JTextField.RIGHT);
jtfFormattedNumberOfYears.setHorizontalAlignment
(JTextField.RIGHT);
jtfFormattedLoanAmount.setHorizontalAlignment(JTextField.RIGHT);
jtfTotalPayment.setHorizontalAlignment(JTextField.RIGHT);
jtfMonthlyPayment.setHorizontalAlignment(JTextField.RIGHT);
jtfFormattedInterestRate.setEditable(false);
jtfFormattedNumberOfYears.setEditable(false);
jtfFormattedLoanAmount.setEditable(false);
jtfTotalPayment.setEditable(false);
jtfMonthlyPayment.setEditable(false);
JPanel p4 = new JPanel();
p4.setLayout(new BorderLayout());
p4.add(p3, BorderLayout.CENTER);
p4.add(jbtCompute, BorderLayout.SOUTH);
add(p1, BorderLayout.NORTH);
add(p2, BorderLayout.CENTER);
add(p4, BorderLayout.SOUTH);
jcboLocale.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
locale = locales[jcboLocale.getSelectedIndex()];
updateStrings();
computeLoan();
}
});
jbtCompute.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
computeLoan();
}
});
}
private void computeLoan() {
double loan = new Double(jtfLoanAmount.getText()).doubleValue();
double interestRate =
new Double(jtfInterestRate.getText()).doubleValue() / 1240;
int numberOfYears =
new Integer(jtfNumberOfYears.getText()).intValue();
double monthlyPayment = loan * interestRate/
(1 - (Math.pow(1 / (1 + interestRate), numberOfYears * 12)));
double totalPayment = monthlyPayment * numberOfYears * 12;
NumberFormat percentFormatter =
NumberFormat.getPercentInstance(locale);
NumberFormat currencyForm =
NumberFormat.getCurrencyInstance(locale);
NumberFormat numberForm = NumberFormat.getNumberInstance(locale);
percentFormatter.setMinimumFractionDigits(2);
jtfFormattedInterestRate.setText(
percentFormatter.format(interestRate * 12));
jtfFormattedNumberOfYears.setText
(numberForm.format(numberOfYears));
jtfFormattedLoanAmount.setText(currencyForm.format(loan));
jtfMonthlyPayment.setText(currencyForm.format(monthlyPayment));
jtfTotalPayment.setText(currencyForm.format(totalPayment));
}
private void updateStrings() {
res = ResourceBundle.getBundle("MyResource", locale);
jlblInterestRate.setText(res.getString("Annual_Interest_Rate"));
jlblNumberOfYears.setText(res.getString("Number_Of_Years"));
jlblLoanAmount.setText(res.getString("Loan_Amount"));
jlblTotalPayment.setText(res.getString("Total_Payment"));
jlblMonthlyPayment.setText(res.getString("Monthly_Payment"));
jbtCompute.setText(res.getString("Compute"));
comboBoxTitle.setTitle(res.getString("Choose_a_Locale"));
inputTitle.setTitle(res.getString("Enter_Interest_Rate"));
paymentTitle.setTitle(res.getString("Payment"));
repaint();
}
public static void main(String[] args) {
ResourceBundleDemo applet = new ResourceBundleDemo();
JFrame frame = new JFrame(
applet.res.getString("Number_Formatting"));
frame.add(applet, BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}