package javacodebook.gui.innerlistener; import java.awt.event.*; import java.awt.*; /** * 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); // 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); } }