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 InvestmentFrame 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 JPanel panel;
25 private BankAccount account;
26
27 public InvestmentFrame()
28 {
29 account = new BankAccount(INITIAL_BALANCE);
30
31 // Use instance variables for components
32 resultLabel = new JLabel("balance: " + account.getBalance());
33
34 // Use helper methods
35 createTextField();
36 createButton();
37 createPanel();
38
39 setSize(FRAME_WIDTH, FRAME_HEIGHT);
40 }
41
42 private void createTextField()
43 {
44 rateLabel = new JLabel("Interest Rate: ");
45
46 final int FIELD_WIDTH = 10;
47 rateField = new JTextField(FIELD_WIDTH);
48 rateField.setText("" + DEFAULT_RATE);
49 }
50
51 private void createButton()
52 {
53 button = new JButton("Add Interest");
54
55 class AddInterestListener implements ActionListener
56 {
57 public void actionPerformed(ActionEvent event)
58 {
59 double rate = Double.parseDouble(rateField.getText());
60 double interest = account.getBalance() * rate / 100;
61 account.deposit(interest);
62 resultLabel.setText("balance: " + account.getBalance());
63 }
64 }
65
66 ActionListener listener = new AddInterestListener();
67 button.addActionListener(listener);
68 }
69
70 private void createPanel()
71 {
72 panel = new JPanel();
73 panel.add(rateLabel);
74 panel.add(rateField);
75 panel.add(button);
76 panel.add(resultLabel);
77 add(panel);
78 }
79 }