Im Rahmen meines Studiums komme ich in der Java-Welt natürlich auch mit Applets in Berührung. Insbesondere kommt das in der Lehrveranstaltung „Entwicklung von Multimedia-Anwendungen“ zum Vorschein. Daher möchte ich meine ersten Applets kurz vorstellen und über einen externen Link auch zum Download und ausprobieren anbieten.
Hello World!
Der erste Schritt in Richtung Applets ist also getan. Mit einem einfachen „Hello World“-Beispiel habe ich den ersten Schritt in Richtung der Applets gesetzt.
Was bei den Applets beachtet werden muss, ist, dass es keine Main-Methode gibt, um das Applet auszuführen. Hier gibt es eine Methode namens init()
, welche das Applet initialisiert und somit auch starten lässt. Sie kommt nur ein Mal und das zu Beginn des Programms vor. Weiterhin sind die Methoden start()
, stop()
und destroy()
wichtige Bestandteile eines Applets. Genau wie init()
wird auch destroy()
nur ein Mal im Programm aufgerufen. Das geschieht hier aber am Ende, wenn das Programm wieder geschlossen wird. Sie beendet sozusagen den Lebenszyklus des Applets. Wurde die destroy()
-Methode einmal aufgerufen, so muss das Applet bei erneutem Start die Initialisierungs-Phase erneut durchlaufen.
Etwas Mathematik
Nachdem ich mit dem Applet nun die Welt begrüßen konnte, sollten kleinere Anwendungen her. Und um den Umgang mit den Applets zu festigen, eigneten sich ein Applet um die Nullstellen einer quadratischen Gleichung mittels der Lösungsformel zu ermitteln sowie ein einfacher Taschenrechner, der die Grundoperationen +, –, * und / beherrschen sollte.
Zunächst ein Paar Worte zum Applet, welches die Lösungsformel beinhaltet.
Die Umsetzung des Applets geschieht über eine Swing GUI, über die mit Hilfe dreier Textfelder die Variablen für a, b und c eingelesen werden. Die Variablen entsprechen der Darstellungsform ax²+bx+c=0
.
In einer Methode rechnen()
berechnet dann ein Algorithmus mit den angegebenen double-Werten die Nullstellen aus, die mit Hilfe der Lösungsformel ermittelt werden. Das Ergebnis wird dann in einem Textfeld ausgegeben. Der Nutzer kann also keine, eine oder zwei Lösungen für die von ihm eingebenen Werte erhalten.
Weiter zum Taschenrechner.
Auch für den Taschenrechner diente eine Swing-GUI zur Realisierung. Dem Benutzer ist es möglich die Grundrechenarten zu benutzen, den aktuellen Wert mit positivem oder negativen Vorzeichen zu versehen und Kommastellen selbst einzugeben.
Kommen wir etwas näher zur Implementierung selbst.
Die Zifferntasten sind äquivalent zueinander implementiert worden.
1 2 3 4 5 6 7 8 |
public void actionPerformed(ActionEvent e) { if(ergPressed == false){ textField.setText(textField.getText() + "1"); }else{ textField.setText("1"); ergPressed = false; } } |
Dabei wird mittels eines ActionListeners zunächst überprueft, ob die Ergebnis-Taste gedrückt wurde. Für den Fall, dass dies nicht so ist (in der Implementierung ist der Boolean ergPressed
mit false
initialisiert worden), nimmt der Taschenrechner den aktuellen String aus dem Textfeld und verkettet ihn mit dem Wert, der gerade eingegeben wurde, welcher in dem Code-Beispiel 1 ist. Für den Alternativ-Fall, dass die Ergebnis-Taste gedrückt wurde und somit im Textfeld ein Ergebnis steht, wird der aktuelle String des Textfeldes mit dem neuen Wert einfach überschrieben und der Boolean ergPressed
wieder auf false
gesetzt, um so wieder mehrere Ziffern eingeben zu können.
Ein weiterer Aspekt, den ich hier kurz erläutern möchte, sind die Kommastellen.
1 2 3 4 5 6 7 |
public void actionPerformed(ActionEvent e) { if(textField.getText().contains(".")){ textField.setText(textField.getText()); }else{ textField.setText(textField.getText() + "."); } } |
Damit nicht zwei Kommas in dem Textfeld stehen können wird auch hier in einer if-Abfrage festgestellt, ob ein Komma schon enthalten ist oder nicht. Dafür habe ich mich der Methode contains()
bedient, die nach einem festgelegten String sucht und feststellt, ob dieser enthalten ist oder nicht. In diesem Fall sucht die Methode nach dem Komma. Insofern dies schon vorhanden ist, wird der aktuell im Textfeld befindliche String reproduziert. Andernfalls wird der aktuelle String mit einem Komma verkettet.
Die Umsetzung der verschiedenen Operationen ist durch eine switch-case-Anweisung implementiert. Hierfür ist den jeweiligen Operationen ein Integer-Wert zugeordnet, der dann in der switch-case-Anweisung abgefragt wird.
1 2 3 4 5 |
public void actionPerformed(ActionEvent e) { operation = 1; zahl1 = Double.parseDouble(textField.getText()); textField.setText(""); } |
Hier im Beispiel ist die Operation für die Addition angegeben.
Mit dem drücken des Buttons werden also die Variablen operation
und zahl1
gesetzt. Wobei zahl1
als Zwischenspeicher dient, um später beim drücken der Ergebnis-Taste ein Ergebnis ausrechnen zu können.
Die hier gesetzten Werte werden dann bei der switch-case-Anweisung benötigt, die sich im ActionListener der Ergebnistaste befindet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public void actionPerformed(ActionEvent e) { zahl2 = Double.parseDouble(textField.getText()); ergPressed = true; switch(operation){ case 0: ergebnis = Double.parseDouble(textField.getText()); textField.setText(Double.toString(ergebnis)); zahl1 = ergebnis; break; case 1: ergebnis = zahl1 + zahl2; textField.setText(Double.toString(ergebnis)); zahl1 = ergebnis; break; } |
Der hier aufgeführte Quelltext ist nur ein Ausschnitt aus der gesamten Anweisung. Zunächst wird der aktuelle Wert aus dem Textfeld ausgelesen und in der Variable zahl2
zwischengespeichert. Danach wird der Boolean ergPressed
auf true
gesetzt, um ein neues Eingeben von Ziffern, wie oben beschrieben, ausführen zu können.
Für die verschiedenen Operationen die mittels dem Integer operation
in den einzelnen cases überprüft werden, gibt es nun unterschiedliche Weiterverarbeitungen der beiden Zahlen aus dem Zwischenspeicher. Für den Fall, dass keine Operation ausgewählt wurde und operation
somit auf Null gesetzt ist, wird der aktuelle Wert des Textfeldes genommen, der Variable ergebnis
zugewiesen und anschließend wieder ausgegeben. Weiterhin wird zahl1
mit ergebnis
gesetzt, um so eine weiterführende Rechnung mit dem Ergebnis ausführen zu können.
Für den Fall, dass operation
den Wert 1 hat, wird die Addition der beiden Zahlen ausgeführt und die Variable ergebnis
anschließend wieder an das Textfeld übergeben und zahl1
nimmt wieder den Wert von ergebnis
an.
Für die nicht aufgeführten Operationen verläuft die Berechnung äquivalent, nur bei der Division wird vorher noch überprüft, ob eine Divison durch Null vorliegt.
Zuletzt möchte ich noch auf die Umsetzung der +/- -Taste eingehen.
1 2 3 4 5 6 7 |
public void actionPerformed(ActionEvent e) { if(textField.getText().startsWith("-")){ textField.setText(textField.getText().replace("-", "")); }else{ textField.setText("-" + textField.getText()); } } |
Die Realisierung ist nicht sehr kompliziert. Mittels einer einfachen if-Abfrage kann man mit Hilfe der Methode startsWith()
überprüfen, ob das Textfeld bereits ein Minus hat oder nicht. Liegt schon ein Minus vor, und man möchte da Vorzeichen ändern, so wird der String mittels replace()
durch eine leere Zeichenkette ersetzt. Ansonsten wird ein Minus an den schon vorhandenen String vorn angesetzt.
Download und Demo
Ansehen und den Code downloaden kann man sich die Applets zu dem Lösungsformel-Berechner und dem Taschenrechner hier.
Die Signatur der Applets ist von mir erstellt und somit auch vertrauenswürdig.
Schreibe den ersten Kommentar