1 import java.awt.event.ActionEvent;
2 import java.awt.event.ActionListener;
3 import javax.swing.JButton;
4 import javax.swing.JFrame;
5 import javax.swing.JLabel;
6 import javax.swing.JPanel;
7 import javax.swing.JTextField;
8
9 /**
10 A frame that shows the growth of an investment with variable interest.
11 */
12 public class InvestmentFrame2 extends JFrame
13 {
14 private static final int FRAME_WIDTH = 450;
15 private static final int FRAME_HEIGHT = 100;
16
17 private static final double DEFAULT_RATE = 5;
18 private static final double INITIAL_BALANCE = 1000;
19
20 private JLabel rateLabel;
21 private JTextField rateField;
22 private JButton button;
23 private JLabel resultLabel;
24 private double balance;
25
26 public InvestmentFrame2()
27 {
28 balance = INITIAL_BALANCE;
29
30 resultLabel = new JLabel("Balance: " + balance);
31
32 createTextField();
33 createButton();
34 createPanel();
35
36 setSize(FRAME_WIDTH, FRAME_HEIGHT);
37 }
38
39 private void createTextField()
40 {
41 rateLabel = new JLabel("Interest Rate: ");
42
43 final int FIELD_WIDTH = 10;
44 rateField = new JTextField(FIELD_WIDTH);
45 rateField.setText("" + DEFAULT_RATE);
46 }
47
48 /**
49 Adds interest to the balance and updates the display.
50 */
51 class AddInterestListener implements ActionListener
52 {
53 public void actionPerformed(ActionEvent event)
54 {
55 double rate = Double.parseDouble(rateField.getText());
56 double interest = balance * rate / 100;
57 balance = balance + interest;
58 resultLabel.setText("Balance: " + balance);
59 }
60 }
61
62 private void createButton()
63 {
64 button = new JButton("Add Interest");
65
66 ActionListener listener = new AddInterestListener();
67 button.addActionListener(listener);
68 }
69
70 private void createPanel()
71 {
72 JPanel panel = new JPanel();
73 panel.add(rateLabel);
74 panel.add(rateField);
75 panel.add(button);
76 panel.add(resultLabel);
77 add(panel);
78 }
79 }