Allora, parto da un altro esercizio che e' piu facile, qui ho un programma che semplicemente crea una finestra con un bottone ed, ogni volta che si preme il bottone aumenta un capitale di un certo interesse, e' molto semplice:
codice:
public class InvestimentViewer1 
{
	public static void main( String args[] )
	{
		JFrame frame = new JFrame();
		JButton button = new JButton("Add Interest");
		final BankAccount account = new BankAccount(INITIAL_BALANCE);
		
		final JLabel label = new JLabel( "balance = " + account.getBalance() );
		
		JPanel panel = new JPanel();
		panel.add( button );
		panel.add(label);
		frame.add(panel);
		
		class AddInterestListener implements ActionListener
		{
			public void actionPerformed( ActionEvent event)
			{
				double interest = account.getBalance() + INTEREST_RATE / 100;
				account.deposit( interest );
				label.setText( "balance = " + account.getBalance() );
				
			}
		}
		
		ActionListener listener = new AddInterestListener();
		button.addActionListener(listener);
		
		frame.setSize( 300, 100);
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
		frame.setVisible( true);
	}
	
	public static final double INTEREST_RATE = 10;
	public static final double INITIAL_BALANCE = 1000;

}
Ora in un esercizio dice di fare la classe interna come classe separata, vi riporto il testo:

" Realizzate la classe AddInterestListener del programma InvestmentViewer in modo che sia una classe normale, anziche' una clase interna. Suggerimento: inserite nel ricevitore un riferimento al conto bancario e all'etichetta, e aggiungete al ricevitore un costruttore che imposti tali riferimenti."

Ora, in un capitolo del libro dice di non usare dei contenitori come ricevitori di eventi, ma di lasciare sempre le classi che realizzano gli eventi come a se stanti, fa questo esempio di cattivo uso
codice:
public class InvestimentViewer implements ActionListener
{
   public InvestimentViewer()
   {
      JButton button = new JButton("Add Interest");
      button.addActionListener(this);
   }
   public void actionPerformed(ActionEvent event
   {
    ...
   }
}
Ora non ci sono altri esempi qua che spieghino come passare questi "riferimenti", realizza tutto come classi interne e di conseguenza io non so come fare questa classe separata visto che devo usare la variabile account e la variabile label in un altra classe, e non come classe interna