JAVA-Grundlagen Kleinschreibung unterschieden.] Vorbemerkung: Ich habe dieses Dokument erstellt, um denen zu helfen, die Nach diesen import-Anweisungen folgt nun der Hauptteil: eigentlich noch nicht richtig wissen, wie sie ein Applet zu erstellen haben (hätte ich es mir nicht selber beigebracht, wüsste ich es auch nicht). Es vermittelt die public class AppletName extends Applet { Grundlagen der Aufbaustruktur eines Applets und die wichtigsten Befehle und // Hier folgt der gesamte Quelltext Definitionen. Ich hoffe es hilft weiter! Sonst fragt einfach! } 1. Was ist objektorientierte Programmierung? Bei objektorienterter Programmierung wird nicht (wie z.B. bei TurboPascal) ein Programmablauf geschrieben, der dann Schritt für Schritt abgearbeitet wird, sondern es werden mehrere Objekte erstellt, die jeweils bestimmte Sachen tun und mit anderen Objekten “kommunizieren”. Objekte sind z.B. Buttons oder Eingabefelder. Objekte benutzen Prozeduren (in JAVA “Methoden” genannt), um miteinander zu kommunizieren. Beispiel: Sobald ein Button angeklickt wird, wird der Text von einem Eingabefeld eingelesen (hier kommunizieren die Objekte miteinander) und eine Methode aufgerufen, die mit diesem eingegebenen Text irgendetwas anstellt, z.B. ihn auf dem Bildschirm ausgibt. 2. Grundstruktur eines Applets (kleine Vorbemerkung: mit JAVA kann man Applets oder Applikationen erstellen, wobei Applets immer von einem Browser, z.B. Netscape, aufgerufen werden, und Applikationen selbstlaufende Programme sind. Dafür gibt es natürlich kleine Unterschiede im Programmtext, weshalb ich vorerst nur Applets erklären werde, um die Konfusion gering zu halten) Als erstes müssen in ein Applet einige Standardklassen eingebunden werden, die z.B. zum Erstellen eines Applets, zur Bildschirmausgabe etc. benötigt werden. Das sind für unsere Problemstellungen normalerweise: import java.awt.*; (für Ein- und Ausgabemethoden und andere nützliche Sachen) import java.applet.*; (für das Erstellen und Arbeiten mit Applets) import java.awt.event.*; (Für die Event-methoden bzw. ActionListener). [Wichtiger Hinweis: JAVA ist case-sensitiv, d.h. es wird zwischen Groß- und Mit dieser Zeile wird eine Klasse mit dem Namen „AppletName“ erstellt, die von der Standardklasse „Applet“ abgeleitet wird.(Diese Standardklasse ist in java.applet.* enthalten) Dieses Ableiten ist notwendig, damit unsere Klasse die Standardeigenschaften eines Applets hat( ein Fenster auf dem Bildschirm z.B.). Wenn wir eine Klasse erstellen, die keine voreingestellten Eigenschaften haben soll, fällt das „extends Klassenname“ einfach weg. (Das Erstellen eigener Klassen wird später behandelt) Das public sagt aus, dass diese Klasse von allen anderen Objekten benutzt werden kann. [Siehe als Beispiel den Igel: Er ist eine eigene Klasse, die man jedoch von einem Applet aus benutzen kann] Weitere Optionen zur Sichtbarkeit sind im Moment nicht so wichtig. Innerhalb dieser Klasse wird jetzt folgendes benötigt: Zuerst können Variablen deklariert werden. public class AppletName extends Applet { int zahl1, zahl2; // erstellt zwei neue Integerzahlen ohne zugewiesenen Wert int zahl3 = 15; // erstellt eine neue Integerzahl, der ein Wert zugewiesen wird double x, y; // erstellt zwei Fließkommazahlen ohne Wert; Button knopf = new Button(„Drück mich!“); // erstellt einen Knopf, auf dem // „Drück mich“ steht Button knopf2; // erstellt einen Knopf, der aber noch initialisiert werden muss String name1; // erstellt eine Zeichenkette String name2 = „Klaus“; // Erstellt eine Zeichenkette, der der Wert „Klaus“ // zugewiesen wird Hierbei ist zu beachten, dass es sich bei String um eine Klasse handelt, und Klassen werden GROSS geschrieben ( der Klassenname – nicht der Name der Variable). Als nächstes folgt die Initialisierung: Alle Variablen, denen vor Programmbeginn ein fester Wert zugewiesen werden soll, werden hier initialisiert. (Dies empfielt sich, damit man bei jeder Variable weiß, welchen Wert sie hat – das debuggen könnte sonst ziemlich umständlich werden.) Außerdem werden hier Objekte erstellt, die am Anfang auf dem Bildschirm erscheinen sollen, z.B. Buttons; public void init() { 1 // void bedeutet, dass die Methode keinen Wert zurückgibt; // die Klammern () enthalten normalerweise die Argumente, // die der Methode übergeben werden, aber init braucht keine, // deshalb die leere Klammer. bzw. graphikObjektmitWillkürlichemNamen.drawString(„Hallo Welt!“); gm.drawString(„Hallo Welt!“); knopf2 = new Button(„Hallo“); // dem erstellten Knopf wird die // Aufschrift „Hallo“ zugewiesen. zahl1 = 5; zahl2 = 10; x = 5.739; y = 4.32335; name1 = „Peter“; add(knopf); add(knopf2); } // Ende von init (An diesem Beispiel sieht man gut, weshalb der Name kurz sein sollte, da angegeben werden muss, auf welchem Graphikobjekt der Text ausgegeben werden soll.) Wichtige Methoden in paint: gm.drawString(string, x, y); // Gibt den String an der Position(x,y) aus wobei (0,0) links oben // in der Ecke ist. [x und y werden in Pixeln angegeben] gm.drawLine(startx,starty,endx,endy); // dürfte klar sein. gm.drawRect(startx,starty,endx,endy); // Rechteck, angegeben wird die linke obere und die Die letzten beiden Zeilen sind dafür da, dass die erstellten Knöpfe auf den // rechte untere Ecke Bildschirm gesetzt werden. HINWEIS: Objekte müssen immer mit new() erzeugt werden, wie z.B. wobei das „gm“ natürlich durch den Namen eures Graphikobjekts ersetzt wird. Button knopf = new Button(„Aufschrift“); oder TextField eingabefeld = new TextField(3); // erzeugt ein Eingabefeld, 3. Methoden // das Platz für 3 Zeichen hat. Methoden sind Programmabschnitte mit einem zugewiesenen Namen, die jederzeit aufgerufen werden können und dann bestimmte Aufgaben ausführen. Das nächste was unbedingt im Code stehen muss, ist die paint-Methode. sie wird beim Applet-start gleich nach init aufgerufen und ist für die Bildschirmausgabe Beispielmethode: zuständig. Wenn der Bildschirm später im Programm neu gezeichnet werden soll, wird die Methode mit public void addiere(int zahl1, int zahl2) { int ergebnis = zahl1 + zahl2; repaint(); gm.drawString(„Ergebnis:“+ergebnis, 10, 10); } aufgerufen. Dieser Methode muss ein Graphik-objekt übergeben werden, auf dem sie zeichnen und schreiben kann. Da dieses Objekt vom Applet automatisch Was heißt das? erstellt wird, muss es nicht initialisiert werden! 1. In der ersten Zeile wird eine Methode mit dem Namen „addiere“ deklariert, der zwei Integer-zahlen übergeben werden[zu beachten ist hier, dass vor jeder Variable angegeben public void paint(Graphics graphikObjektmitWillkürlichemNamen) { werden muss, welchen Datentyp sie hat(hier also int)]. Die Methode liefert keinen // Anweisungen Rückgabewert, deshalb „void“. Sie kann von überall aufgerufen werden, deshalb „public“. } 2. Innerhalb der Methode wird eine neue Integerzahl mit dem Namen „ergebnis“ erstellt und ihr das Ergebnis der Addition der beiden übergebenen Zahlen zugewiesen. Danach wird sie Wie oben ersichtlich, kann man das Graphikobjekt nennen wie man will, obwohl zusammen mit dem Text „Ergebnis:“ auf dem Bildschirm an der Position (10;10) ausgegeben. ein kürzerer Name natürlich angebrachter ist, z.B. Die Methode wird jetzt z.B. aus paint aufgerufen: public void paint(Graphics gm) { // Anweisungen } Die Anweisungen innerhalb der Methode können z.B. Befehle zum Ausgeben von Text sein: public void paint(Graphics gm) { int x = 16; int y = 25; addiere(x, y); } 2 Hier werden zwei neue Integerzahlen mit den Namen x und y erstellt und ihnen drehe(winkelinGrad); // Dreht nach links; für Rechtsdrehungen ein - davorsetzen Werte zugewiesen. Danach wird unsere Methode aufgerufen, wobei ihr die beiden Variablen übergeben werden, die sie addieren soll. Auf dem Bildschirm steht also Der Igel wird mit dem Konstruktor nach dem Ausführen: Igel NameDesIgels = new Igel(Graphikobjekt, PosX, PosY, Richtung); Ergebnis: 41 erstellt. (Normalerweise in paint – Hier soll er ja schließlich zeichnen) Wenn man das ganze geschickter machen möchte, kann man die Methode so schreiben, dass sie das Ergebnis dem Aufrufer zurückgibt, so dass dieser weiter public void paint(Graphics gm) { damit arbeiten kann: Igel hans = new Igel(gm, 50, 50, -90); hans.vor(30); public int addiere(int zahl1, zahl2) { hans.drehe(45); int ergebnis = zahl1 + zahl2; hans.vor(50); return ergebnis; hans.drehe(-45); } hans.vor(30); } Diese Methode wird jetzt z.B. so aufgerufen: In diesem Beispiel wird ein Igel mit dem Namen „hans“ an der Position (50;50) erstellt, der public void paint(Graphics gm) { nach rechts guckt(die Richtung 0 zeigt nach oben, -90 also nach rechts) und dann folgendes int x = 16; auf den Bildschirm malt: (ungefähr) int y = 25; __ / int summe; summe = addiere(x, y); // Hierbei wird addiere ausgeführt und __/ // danach der Ergebniswert mit return(siehe oben) // der Variable „summe“ zugewiesen. (er geht also erstmal 30 Pixel nach rechts, dreht sich 45° nach links, geht 50 Pixel summe++; // ist das selbe wie summe = summe + 1 schräg nach oben, dreht sich wieder 45° nach rechts und geht noch 30 Pixel nach rechts) gm.drawString(„Ergebnis:“+summe, 10, 10); } 6. ActionListener Hier gibt die Methode also einen Integerwert zurück, mit dem danach noch ActionListener sind, wie der Name schon sagt, dafür da, „Bescheid zu sagen“, wenn etwas gerechnet werden kann. die Bildschirmausgabe sieht dann folgendermaßen aus: passiert, z.B. ein Knopf gedrückt wurde. Ein ActionListener „lauscht“ immer auf ein Objekt, d.h. erst muss ein Objekt erstellt werden, bevor ihm ein ActionListener hinzugefügt wird. Ergebnis: 42 Beispiel-Applet [Nicht vergessen an dieser Stelle die Standard-klassenpackages einzubinden (import) !!!!! ] 4. Variablentypen Es gibt folgende wichtigen Variablentypen: public class Appletname extends Applet { // WICHTIG: Die Datei muss als Appletname.java int eine ganze Zahl // gespeichert werden !!!! double Eine Fließkommazahl(Dezimalbruch – bitte einen Punkt benutzen!) String Name = new String(“ “); // Erstellt einen leeren String boolean ein Wahrheitswert, kann nur den Wert true oder false haben. Button knopf = new Button(„Drück mich!“); // Erstellt einen Knopf String eine Zeichenkette, eingeschlossen von Anführungszeichen “ Text “ TextField name = new TextField(20); // Erstellt ein Eingabefeld mit Platz für 20 Zeichen Label text = new Label(„Gib einen Namen ein und drück den Knopf!“); // Erstellt ein // Label mit der angegebenen Aufschrift 5. Benutzen des Igels Die Befehle für den Igel sind: public void init() { vor(StreckeinPixeln); add(text); // Platziert das Label auf dem Bildschirm, d.h. der Labeltext wird dort 3 // ausgegeben add(name); // Platziert das Eingabefeld auf dem Bildschirm add(knopf); // Platziert den Knopf auf dem Bildschirm knopf.addActionListener(new ActionListener() { //Fügt dem Knopf // einen ActionListener hinzu public void actionPerformed(ActionEvent e) { // Die Methode wird // aufgerufen, wenn der Knopf gedrückt wurde Name = name.getText(); // Weist dem String den Inhalt des // TextFields zu repaint(); // Malt den Bildschirm neu } // Ende der ActionPerformed-Methode } // Ende der Deklaration des ActionListeners ); // Ende der Argument-liste von knopf.addAcctionListener() } // Ende von init() public void paint(Graphics gm) { gm.drawString(„Der eingegebene Name ist“+Name, 50, 50); } 7. Auch wichtig: Die aufrufende HTML-Seite Diese kann nach dem Standardmuster gebaut werden: <html> <head> <title>Titel der Seite</title> </head> <body> <applet code = „NamedesApplets.class“ width=BreitedesAppletfensters height=Höhe > </applet> </body> </html> Das ganze sollte dann noch als NamedesApplets.html gespeichert werden (Es ist praktisch, dass zu tun, weil man dann immer weiß, welches Applet zu welcher Seite gehört [Ist aber nicht zwingend]) [Wie die .class-Datei erzeugt wird(kompilieren) werdet ihr wohl schon wissen] 8. P.S.: Wer es noch nicht bemerkt hat: Alles was in den Quelltextbeispielen kursiv geschrieben ist, soll durch entsprechende Ausdrücke ersetzt werden (z.B. bei [Anmerkung: Innerhalb der ActionPerformed-Methode des ActionListeners public class NamedesApplets extends Applet stehen die Anweisungen, die ausgeführt werden sollen, wenn eine Aktion public class IgelBeispiel extends Applet stattgefunden hat.] oder so.) } // Ende des Applets Bei diesem Applet erscheinen also erstmal drei Elemente auf dem Bildschirm: eine Aufschrift, ein Eingabefeld und ein Knopf. Dem Knopf wird ein ActionListener hinzugefügt, der folgendes bewirkt: Jedesmal, wenn der Knopf gedrückt wurde, wird dem String „Name“ der Inhalt des Eingabefeldes zugewiesen und der Bildschirm neu gezeichnet, wobei der Text „Der eingegebene Name ist Name“ ausgegeben wird. So, das waren alle wichtigen Grundlagen, die mir eingefallen sind. Wenn noch offene Fragen existieren, dann her damit! ©Christian Afonso 4