package javacodebook.gui.innerlistener;

import java.awt.event.*;
import java.awt.*;

/**
 * @author Benjamin Rusch
 * 
 * Dieses Frame nimmt Eingaben oben im TextFeld entgegen, und schreibt
 * diese dann beim Button-Klick in den Editor.
 * Das elegante an der verwendeten annonymen inneren Klasse ist, dass 
 * man direkt aus der actionPerformed Methode das TextFeld zum auslesen
 * und die TextArea zum einfügen ansprechen kann. 
 */

public class InnerListener  extends Frame {
	
	private Button add	= new Button("Hinzufügen");
	TextField field = new TextField(15);
	private Panel north = new Panel(); 
	TextArea editor = new TextArea(9,20);
	private ScrollPane scrollbar = new ScrollPane();
	
	
	/**
 	*	Konstruktor von InnerListener.  
 	*/	
	public InnerListener(String title) {
		
		super(title);  
		
		// auch den WindowListener kann man über eine innerer Klasse 
		// realisieren.
		this.addWindowListener(new WindowAdapter() {
				    public void windowClosing(WindowEvent we) {
						System.exit(0);
				    }
				});
		
	  	this.setLayout(new BorderLayout());
		
		// Die TextArea wird in den CENTER-Bereich des Frames gelegt
		this.add(editor);

		/*
		// Ein externer Listener wird registriert. Durch die Übergabe von this
		// besitzt der Listener eine Referenz auf dieses Frame, und kann über
		// die Attribute auch das Textfeld auslesen, und in die TextArea rein 
		// schreiben :
		add.addActionListener(new ButtonListener(this));
		*/
		
		// nach "new ActionListener(){" wird die annonyme innere Klasse 
		// gebaut. Man erinnert sich, dass normaler Weise keine Instanz 
		// von einem Interface gebildet werden darf. ActionListener ist 
		// aber ein Interface. Diese Ausnahme ist nur dann erlaubt, wenn 
		// im gleichen Zuge das Interface korrekt überschriben wird. 
		// In unserem Fall muss also die actionPerformed-Methode in dem 
		// folgendem Rumpf auftauchen.		
		add.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent ae){
						editor.append(field.getText());
					}
				});

		north.add(add);
		north.add(field);

		this.add(north, BorderLayout.NORTH);	
	}
}
