      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.JScrollPane;

      8  import javax.swing.JTextArea;

      9  import javax.swing.JTextField;

     10

     11  /**

     12     A frame that shows the growth of an investment with variable interest.

     13  */

     14  public class InvestmentFrame extends JFrame

     15  {

     16     private static final int FRAME_WIDTH = 400;

     17     private static final int FRAME_HEIGHT = 250;

     18

     19     private static final int AREA_ROWS = 10;

     20     private static final int AREA_COLUMNS = 30;

     21     private static final double DEFAULT_RATE = 5;

     22     private static final double INITIAL_BALANCE = 1000;

     23

     24     private JLabel rateLabel;

     25     private JTextField rateField;

     26     private JButton button;

     27     private JTextArea resultArea;

     28     private JPanel panel;

     29     private BankAccount account;

     30

     31     public InvestmentFrame()

     32     {

     33        account = new BankAccount(INITIAL_BALANCE);

     34        resultArea = new JTextArea(AREA_ROWS, AREA_COLUMNS);

     35        resultArea.setEditable(false);

     36

     37        // Use helper methods

     38        createTextField();

     39        createButton();

     40        createPanel();

     41

     42        setSize(FRAME_WIDTH, FRAME_HEIGHT);

     43     }

     44

     45     private void createTextField()

     46     {

     47        rateLabel = new JLabel("Interest Rate: ");

     48

     49        final int FIELD_WIDTH = 10;

     50        rateField = new JTextField(FIELD_WIDTH);

     51        rateField.setText("" + DEFAULT_RATE);

     52     }

     53

     54     private void createButton()

     55     {

     56        button = new JButton("Add Interest");

     57

     58        class AddInterestListener implements ActionListener

     59        {

     60           public void actionPerformed(ActionEvent event)

     61           {

     62              double rate = Double.parseDouble(rateField.getText());

     63              double interest = account.getBalance() * rate / 100;

     64              account.deposit(interest);

     65              resultArea.append(account.getBalance() + "\n");

     66           }

     67        }

     68

     69        ActionListener listener = new AddInterestListener();

     70        button.addActionListener(listener);

     71     }

     72

     73     private void createPanel()

     74     {

     75        panel = new JPanel();

     76        panel.add(rateLabel);

     77        panel.add(rateField);

     78        panel.add(button);

     79        JScrollPane scrollPane = new JScrollPane(resultArea);

     80        panel.add(scrollPane);

     81        add(panel);

     82     }

     83   }