Informatik-AG—5. Woche: Ein Action-Listener für

Werbung
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
Herunterladen