import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
   This program shows a frame with a text area that displays
   the growth of an investment. 
*/
public class TextAreaViewer
{  
   public static void main(String[] args)
   {  
      JFrame frame = new JFrame();

      // The application adds interest to this bank account
      final BankAccount account = new BankAccount(INITIAL_BALANCE);
      // The text area for displaying the results
      final int AREA_ROWS = 10;
      final int AREA_COLUMNS = 30;

      final JTextArea textArea = new JTextArea(
            AREA_ROWS, AREA_COLUMNS);
      textArea.setEditable(false);
      JScrollPane scrollPane = new JScrollPane(textArea);

      // The label and text field for entering the interest rate
      JLabel rateLabel = new JLabel("Interest Rate: ");

      final int FIELD_WIDTH = 10;
      final JTextField rateField = new JTextField(FIELD_WIDTH);
      rateField.setText("" + DEFAULT_RATE);

      // The button to trigger the calculation
      JButton calculateButton = new JButton("Add Interest");

      // The panel that holds the input components
      JPanel northPanel = new JPanel();
      northPanel.add(rateLabel);
      northPanel.add(rateField);
      northPanel.add(calculateButton);
      
      frame.add(northPanel, BorderLayout.NORTH);
      frame.add(scrollPane);     
     
      class CalculateListener implements ActionListener
      {
         public void actionPerformed(ActionEvent event)
         {
            double rate = Double.parseDouble(
                  rateField.getText());
            double interest = account.getBalance() 
                  * rate / 100;
            account.deposit(interest);
            textArea.append(account.getBalance() + "\n");
         }            
      }

      ActionListener listener = new CalculateListener();
      calculateButton.addActionListener(listener);

      frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }

   private static final double DEFAULT_RATE = 10;
   private static final double INITIAL_BALANCE = 1000;

   private static final int FRAME_WIDTH = 400;
   private static final int FRAME_HEIGHT = 200;
}
