1  import java.awt.event.ActionEvent;
  2  import java.awt.event.ActionListener;
  3  import javax.swing.JButton;
  4  import javax.swing.JFrame;
  5  
  6  /**
  7     This program demonstrates how an action listener can access 
  8     a variable from a surrounding block.
  9  */
 10  public class InvestmentViewer1
 11  {  
 12     private static final int FRAME_WIDTH = 120;
 13     private static final int FRAME_HEIGHT = 60;
 14  
 15     private static final double INTEREST_RATE = 10;
 16     private static final double INITIAL_BALANCE = 1000;
 17  
 18     public static void main(String[] args)
 19     {  
 20        JFrame frame = new JFrame();
 21  
 22        // The button to trigger the calculation
 23        JButton button = new JButton("Add Interest");
 24        frame.add(button);
 25  
 26        // The application adds interest to this bank account
 27        final BankAccount account = new BankAccount(INITIAL_BALANCE);
 28        
 29        class AddInterestListener implements ActionListener
 30        {
 31           public void actionPerformed(ActionEvent event)
 32           {
 33              // The listener method accesses the account variable
 34              // from the surrounding block
 35              double interest = account.getBalance() * INTEREST_RATE / 100;
 36              account.deposit(interest);
 37              System.out.println("balance: " + account.getBalance());
 38           }            
 39        }
 40       
 41        ActionListener listener = new AddInterestListener();
 42        button.addActionListener(listener);
 43  
 44        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
 45        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 46        frame.setVisible(true);
 47     }
 48  }