Informatik-AG—5. Woche: Ein Action-Listener für Fibonacci-Zahlen Bernhard Haubold 27. September 2015 1 Einleitung In den vergangenen zwei Wochen haben wir zwei der drei Teile unseres Programms zur Berechnung von FibonacciZahlen geschrieben: einen zur Berechung von Fibonacci-Zahlen in der Klasse Mathe, und einen für Benutzereingabe und -ausgabe, FibonacciGui. Heute fügen wir mit der dritten Klasse, Fibonacci-Listener, diese beiden Teile zusammen. 2 Aufgaben Aufgabe 2.1 Schreibe die Klasse FibonacciListener in der Datei FibonacciListener.java, wobei FibonacciListener das Interface ActionListener implementiert. Da das Interface ActionListener im Paket java.awt.event enthalten ist, schreiben wir in die erste Zeile von FibonacciListener.java 1 import java.awt.event.*; import javax.swing.*; Sobald wir deklarieren, dass eine Klasse das Interface ActionListener implementiert, müssen wir in der Klasse auch die Methode actionPerformed programmieren, indem wir schreiben: 3 public void actionPerformed(ActionEvent arg0) { ... } Schreibe eine erste Fassung von FibonacciListener und versuche, sie mit javac zu kompilieren. Aufgabe 2.2 Erinnere Dich, dass wir in FibonacciListener aus dem Eingabefeld lesen und die entsprechende Fibonaccizahln in das Ausgabefeld schreiben wollen. Dazu brauchen wir • eine Variable vom Typ JTextField für das Eingabefeld, • eine Variable gleichen Typs für das Ausgabefeld, und • eine Variable vom Typ Mathe, um die Berechnungen durchführen zu können. Diese Variablen sollen in allen Methoden der Klasse verwendbar sein; Programmierer nennen solche Variable global. Wir schreiben zur Erzeugung solcher globalen Variablen in die beiden Zeilen unterhalb der Klassendeklaration 2 JTextField inputText, outputText; Mathe mathe; Aufgabe 2.3 Den eben erstellten Variablen weisen wir am geschicktesten im Konstruktor Werte zu. Dabei werden die Werte für die Ein- und Ausgabefelder aus der Argumentliste des Konstruktors übergeben, während mathe neu erzeugt werden muss. Versuche einen solchen Konstruktor zu erstellen. Schaue Dir dazu den folgenden Lösungsvorschlag an und versuche ihn dann selber zu programmieren: 1 3 FibonacciListener(JTextField inputText, JTextField outputText){ this.inputText = inputText; this.outputText = outputText; mathe = new Mathe(); } Aufgabe 2.4 Bei jeder “Aktion”, führt FibonacciListener die Befehle aus, die in actionPerformed stehen. In unserem Fall brauchen wir Befehle, um • Aus inputText zu lesen. Dort steht eine Zahl, allerdings als Zeichenkette (“String”); also müssen wir • den eingelesenen String in eine ganze Zahl umwandeln. • Aus ihr die entsprechende Fibonacci-Zahl ausrechnen. • Die Fibonacci-Zahl in einen String umwandel. • Die String-Version der Fibonacci-Zahl in das Ausgabefeld schreiben. Hier ist ein Bespiel-Programm, mit dem diese Schritte durchgefürt werden können. Lies es Dir in Ruhe durch und versuche dann aus dem Gedächtnis eine eigene Version zu schreiben. 5 public void actionPerformed(ActionEvent arg0) { String inputString, outputString; Integer inputInteger; int inputInt; double outputDouble; inputString = inputText.getText(); inputInteger = Integer.valueOf(inputString); inputInt = inputInteger.intValue(); outputDouble = mathe.fibonacci(inputInt); outputString = Double.toString(outputDouble); outputText.setText(outputString); 10 } Aufgabe 2.5 Zum Schluss fügen wir die Teile des Puzzles zusammen, indem wir im Konstruktor von FibonacciGui oben eine Variable vom Typ FibonacciListener erzeugen, zum Beispiel: FibonacciListener fl; Nach der Instanziierung der Variablen inputText (erinnere Dich, das geht mit new), instanziierst Du auch fl, wobei Du die Eingabe- und Ausgabefelder als Parameter übergibst: fl = new FibonacciListener(inputText, outputText); Jetzt müssen wir nur noch den eben erstellten FibonacciListener dem Eingabefeld hinzufügen: inputText.addActionListener(fl); Probiere nun das ganze Programm aus. 2 Lösungen Lösung zu Aufgabe 2.1: import java.awt.event.*; 4 public class FibonacciListener implements ActionListener{ public void actionPerformed(ActionEvent arg0) { } } 3