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     using a text area.
 14  */
 15  public class InvestmentFrame3 extends JFrame
 16  {
 17     private static final int FRAME_WIDTH = 400;
 18     private static final int FRAME_HEIGHT = 250;
 19     
 20     private static final int AREA_ROWS = 10;
 21     private static final int AREA_COLUMNS = 30;
 22  
 23     private static final double DEFAULT_RATE = 5;
 24     private static final double INITIAL_BALANCE = 1000;   
 25       
 26     private JLabel rateLabel;
 27     private JTextField rateField;
 28     private JButton button;
 29     private JTextArea resultArea;
 30     private double balance;
 31   
 32     public InvestmentFrame3()
 33     {  
 34        balance = INITIAL_BALANCE;
 35        resultArea = new JTextArea(AREA_ROWS, AREA_COLUMNS);
 36        resultArea.setText(balance + "\n");
 37        resultArea.setEditable(false);
 38              
 39        createTextField();
 40        createButton();
 41        createPanel();
 42  
 43        setSize(FRAME_WIDTH, FRAME_HEIGHT);
 44     }
 45  
 46     private void createTextField()
 47     {
 48        rateLabel = new JLabel("Interest Rate: ");
 49  
 50        final int FIELD_WIDTH = 10;
 51        rateField = new JTextField(FIELD_WIDTH);
 52        rateField.setText("" + DEFAULT_RATE);
 53     }
 54     
 55     class AddInterestListener implements ActionListener
 56     {
 57        public void actionPerformed(ActionEvent event)
 58        {
 59           double rate = Double.parseDouble(rateField.getText());
 60           double interest = balance * rate / 100;
 61           balance = balance + interest;
 62           resultArea.append(balance + "\n");
 63        }            
 64     }
 65  
 66     private void createButton()
 67     {
 68        button = new JButton("Add Interest");      
 69        
 70        ActionListener listener = new AddInterestListener();
 71        button.addActionListener(listener);
 72     }
 73  
 74     private void createPanel()
 75     {
 76        JPanel panel = new JPanel();
 77        panel.add(rateLabel);
 78        panel.add(rateField);
 79        panel.add(button);
 80        JScrollPane scrollPane = new JScrollPane(resultArea);
 81        panel.add(scrollPane);      
 82        add(panel);
 83     }
 84  }