Einführung in die Programmiersprache JAVA

Größe: px
Ab Seite anzeigen:

Download "Einführung in die Programmiersprache JAVA"

Transkript

1 Einführung in die Programmiersprache JAVA unter Verwendung der Entwicklungsumgebung BlueJ Text von K.Spier (2004), überarbeitet von B.Spier ( )

2 JAVA-Einführung, Seite 2 Inhaltsverzeichnis Kapitel 1: Vorstellung der Entwicklungsumgebung BlueJ und erstes Projekt... 3 Installation... 3 Projekt Beispiel_1 (Quader)... 4 Der Editor von BlueJ für JAVA-Quelltexte... 5 Kapitel 2: Zweites Projekt: Bankkonto (Bank_1)... 8 Erstellen einer vollständigen Übersicht zur Klasse 'Konto' (Dokumentation) Kapitel 3: Drittes Projekt: Bank_ Informationen zu private und public Kapitel 4: Viertes Projekt: Fahrkartenautomat Zahlen formatieren Kapitel 5: Fünftes Projekt: Person (Vererbung / GregorianCalendar) Vererbung Überschreiben von Methoden Kapitel 6: Sechstes Projekt: Wir programmieren ein Applet Aufbau eines HTML-Quelltextes Kapitel 7: Siebentes Projekt: Das Applet reagiert auf eine Maus-Aktion Kapitel 8: Achtes Projekt: Das Puzzle mit 25 Feldern Klassenvariablen und Instanzvariablen Array For-Schleife Start und Stop While-Schleife Kapitel 9: Was haben wir jetzt gelernt? (Wdh. und kleine Ergänzungen) (Klassen, Variablen, Methoden, Konstruktoren, Fallunterscheidung, Schleifen) Kapitel 10: Schlussbemerkung Anhang JAVA-Programm ohne Entwicklungsumgebung erstellen Listen, die nur Instanzen einer einzigen Klasse verwalten Formatierungen von numerischen Werten (2 Beispiele für String.format)... 42

3 JAVA-Einführung, Seite 3 Vorbemerkung Mit JAVA wurde eine objektorientierte Programmiersprache entwickelt, die unabhängig vom Betriebssystem des Computers ist, auf dem die Programme laufen. Es gibt viele so genannte Entwicklungsumgebungen, um JAVA-Programme zu erstellen. Eine Entwicklungsumgebung ist zwar nicht Voraussetzung zum Programmieren JAVA-Programme ließen sich auch mit einem einfachen Texteditor erstellen. Mit einem Compiler können daraus Dateien erstellt werden, die ein JAVA-Runtime-Environment ausführen kann, solche Datei kann also ein fertiges Programm aufgefasst werden. Mit Hilfe einer Entwicklungsumgebung können Quelltexte sowohl erstellt als auch kompiliert und ausgeführt werden, dadurch sind die Arbeitsschritte erheblich einfacher und übersichtlicher. Außerdem ist der Editor dann üblicherweise mit Syntaxhervorhebung (s. S. 5) versehen, so dass die Programmstruktur besonders gut sichtbar wird. Interessierte finden im Anhang eine kurze Beschreibung, wie man auch ohne Entwicklungsumgebung ein JAVA-Programm erstellen kann. Für den Einstieg in das Programmieren mit JAVA ist BlueJ besonders gut geeignet. 1. Vorstellung der Entwicklungsumgebung BlueJ und erstes Projekt JAVA installieren JAVA wird durch Ausführen der Datei jdk-7u25-windows-i586.exe 1 oder auf 64-Bit-Systemen jdk-7u25-windows-x64.exe installiert. (Ein Java-Runtime-Environment jre..., das mit OpenOffice, Geogebra oder anderen Programmen vielleicht bereits installiert ist, genügt nicht für BlueJ wird ein Java-Development-Kit jdk... benötigt. Für Download nach java se downloads oder jdk suchen!) JAVA muss vor BlueJ installiert werden. BlueJ installieren BlueJ darf für Bildungszwecke verwendet werden ohne dass Lizenzgebühren zu zahlen sind. (Siehe Homepage von BlueJ, Download der Version von dort.) Zur Installation wird die Datei bluejsetup-308.msi 2 ausgeführt. Beim ersten Programmstart sucht BlueJ die zu verwendende JAVA-Version und zeigt eventuell ein Auswahlfenster, wenn die Zuordnung nicht automatisch erfolgen kann. Spracheinstellung: Deutsch Wenn die Entwicklungsumgebung in deutscher Sprache erscheinen soll, muss die Datei BlueJ.defs mit einem Text-Editor bearbeitet werden, geeignet ist z.b. WordPad (Startmenü/Zubehör). Dieser Editor muss bei aktuellen Windows-Versionen als Administrator ausgeführt werden, damit im Installationsordner (vermutlich: C:\Programme(x86)\BlueJ\) Schreibberechtigung erreicht wird. BlueJ.defs liegt im Unterverzeichnis lib des Installationsordners von BlueJ. Zum Öffnen muss als Dateityp Alle Dokumente (*.*) eingestellt werden. bluej.language=english In dieser Datei findet man (ungefähr Zeile 31) die Festlegung der Sprache: Hier kann bluej-language=english in bluej.language=german wird zu: geändert werden. Danach wird die Datei gespeichert. bluej.language=german 1 Aktuelle Version im August Aktuelle Version im August 2013

4 JAVA-Einführung, Seite 4 Ein Projekt beginnen: Projekt Beispiel_1 Wir starten BlueJ und wählen den Menüpunkt Projekt/Neues Projekt. Es erscheint das Dialogfenster, in dem wir angeben, wo das Projekt gespeichert werden soll. Ein Projekt besteht immer aus mehreren Dateien, deshalb wird für jedes Projekt ein eigener Ordner angelegt. Ordner, die ein BlueJ-Projekt enthalten, werden von BlueJ durch ein spezielles Symbol gekennzeichnet (siehe Abbildung). Mit dem Schalter Erzeugen wird der Ordner mit dem eingegebenen Namen angelegt und die Projektdateien werden darin gespeichert. Die Arbeitsfläche von BlueJ enthält zunächst nur ein Symbol für eine Readme-Datei, die für eine Beschreibung des Projekts vorgesehen ist. Nicht nur im Schulunterricht macht es Sinn, in einer solchen Datei eine ganz knappe Beschreibung des Projektes anzugeben. Die Datei wird mit einem Doppelklick auf das Symbol geöffnet, dann bearbeitet, gespeichert und wieder geschlossen. Nun werden wir als erstes Beispiel eine Klasse mit Namen 'Quader' erstellen (wie im Info-Kasten oben rechts). Eine Klasse im Projekt erstellen Info: In der objektorientierten Programmierung arbeitet man mit Objekten. (logisch) Objekte können Eigenschaften haben. Beispiel: Ein Quader hat die Eigenschaften Länge, Breite, Höhe. Diesen Eigenschaften können verschiedene Werte zugeordnet sein. Ein zweiter Quader hat die gleichen Eigenschaften, aber mit anderen zugeordneten Werten. Ein Zylinder hat dagegen andere Eigenschaften, denn er ist durch Radius und Höhe bestimmt. Alle Quader können wir zu einer Klasse zusammenfassen: Wenn wir eine Klasse 'Quader' definieren, dann legen wir darin eine Art Bauplan fest. Alle Quader sind Objekte, die nach diesem Bauplan konstruiert werden. In der Definition der Klasse 'Quader' wird außer den Eigenschaften Länge, Breite, Höhe auch eine Methode zum Erzeugen von Quader-Objekten festgelegt, sie wird als Konstruktor oder Constructor bezeichnet. Anmerkungen: 1. Die genannten Begriffe werden allgemein bei der objektorientierten Programmierung verwendet unabhängig davon, ob man z.b. mit JAVA oder mit Delphi arbeitet. 2. Gelegentlich sagt man auch, in der Definition einer Klasse wird der Objekt-Typ beschrieben, und das danach konstruierte Objekt wird auch als Objekt-Instanz bezeichnet. Wir klicken auf den Schalter Neue Klasse und geben als Namen für diese Klasse Quader ein. Daraufhin erscheint ein neues Symbol für diese Klasse in der Projektübersicht. Wir klicken doppelt auf dieses Symbol, um die Klasse zu bearbeiten. Zunächst sehen wir schon einige Zeilen vorgegebenen Text im Editor für unseren Java-Quelltext, den wir nach unseren Erfordernissen anpassen werden (einige Zeilen löschen, andere ergänzen).

5 Der Editor von BlueJ für JAVA-Quelltexte JAVA-Einführung, Seite 5 Der Editor arbeitet mit sogenannter Syntax- Hervorhebung, d.h. dass z.b. reservierte Wörter oder Kommentare in bestimmter Weise farblich hervorgehoben werden. Die Tatsache, dass hier der größte Teil des Textes in blau dargestellt ist, zeigt bereits, wie wichtig Kommentare in Computerprogrammen sind. Bei genauem Hinsehen können wir sogar zwei verschiedene Arten von Kommentaren unterscheiden: Einfache Kommentare werden mit zwei Schrägstrichen eingeleitet und dienen oft dem Programmierer als Notiz. Die anderen, die mit /** eingeleitet, mit * fortgesetzt und mit */ beendet werden, dienen zusätzlich zur Information für andere darauf wird später näher eingegangen (Seite 10). Auf die Begriffe public und private wird ebenfalls später eingegangen (Seite 15). Wir sehen, dass die Klassendefinition mit dem Wort class eingeleitet wird, gefolgt vom Namen der Klasse. Dann folgt eine öffnende geschweifte Klammer, die zugehörige schließende Klammer steht in der letzten Zeile. Der BlueJ-Editor gestaltet nicht nur den Schriftstil, er hebt auch die Struktur durch die Hintergrundfarbe hervor (z.b. Texte innerhalb eines -Klammerpaares).

6 JAVA-Einführung, Seite 6 Zum Aufbau dieses Programm-Quelltextes: Nach dem Klassennamen werden im obigen Beispiel die Eigenschaften (hier: Variablen) für die Instanzen festgelegt: Jede Instanz, die wir gemäß diesem Bauplan erzeugen, soll je eine Variable für Länge, Breite und Höhe besitzen. Der Variablentyp wird in JAVA immer dem Variablennamen vorangestellt. Hier wird int als Variablentyp angegeben, d.h. die aufgeführten Variablen sind vom Typ integer, sie können nur ganzzahlige Werte aufnehmen. (Wir folgen damit dem Vorschlag von BlueJ für die Variablentypen, andere lernen wir später kennen.). Da diese Variablen hier den Instanzen zugeordnet sind, heißen sie auch Objektfelder oder Datenfelder oder auch Instanzvariablen. In Java sind auch Umlaute in Variablennamen zugelassen. Umlaute werden jedoch nicht in allen Entwicklungsumgebungen (bzw. Betriebssystemen, z.b. Linux) gleich codiert. Die BlueJ-Version kann zwar Quelltexte übersetzen, in denen Methoden- oder Klassen-Bezeichner Umlaute enthalten, jedoch führen Methodenaufrufe dann zu Fehlern. Variablen-Bezeichner können Umlaute enthalten, ohne dass es zu Fehlern kommt. Version kann offenbar gut mit Umlauten umgehen. Die Vermeidung von Umlauten und anderen Sonderzeichen ist dennoch zu empfehlen. Es folgt die Festlegung des Standard-Konstruktors. Der Name des Konstruktors stimmt in JAVA immer mit dem Namen der Klasse überein. Dieser Konstruktor ist hier sehr einfach aufgebaut: Er legt nur Werte für die Variablen eines Quaders fest, der mit ihm erzeugt wird. Alle Quader- Instanzen, die mit diesem Konstruktor erzeugt werden, haben die gleichen Werte für die Höhe, die Länge und die Breite. Für die Zuweisung von Werten an eine Variable wird in JAVA ein einfaches Gleichheitszeichen verwendet (wie in BASIC, C++, aber anders als in PASCAL u. DELPHI). Auch für den Konstruktor werden Anfang und Ende durch öffnende bzw. schließende geschweifte Klammer gekennzeichnet. Beachten Sie die übersichtlichen Positionen aller -Klammerpaare! Das Beispiel zeigt außerdem, dass eine Klasse mehrere Konstruktoren besitzen kann: Ein zweiter Konstruktor dient dazu, Quader zu konstruieren, bei denen mit Aufruf des Konstruktors Werte für die Länge, die Breite und die Höhe erfragt und übernommen werden. Zum Schluss zeigt das Beispiel, dass die Klasse außer Konstruktoren auch noch andere Methoden besitzen kann, hier zur Berechnung des Volumens. Diese Methode berechnet aus Länge, Breite und Höhe der Quader-Instanz ihr Volumen. Durch die Angabe von return wird festgelegt, welcher Wert bei Aufruf dieser Methode zurückgegeben wird. Bei allen Methoden, die einen Wert zurückgeben, muss vor dem Namen der Methode ähnlich wie bei Variablen der Typ des Rückgabewertes angegeben werden, hier also int für integer (ganzzahlig). Wenn wir die Klasse 'Quader' so wie oben beschrieben festgelegt haben, lassen wir diesen Text übersetzen (auch als compilieren bezeichnet, Schalter links oben, Shortcut Strg-k). Dabei wird dieser Text in einen vom Computer interpretierbaren Code übersetzt. Beim Compilieren zeigen sich (nicht nur bei Anfängern) oft kleine Fehler, die eine Übersetzung verhindern, z.b. eine fehlende Klammer, ein fehlendes Semikolon oder ähnliches. Tipp 1: Da zu jeder öffnenden geschweiften Klammer eine schließende gehört, ist es vernünftig, nach der öffnenden auch gleich die schließende (in der nächsten Zeile) zu tippen. Den weiteren Text kann man dann dazwischen einfügen. Tipp 2: Einrückungen wie im Beispiel sind für die Interpretation des Quelltextes zwar nicht erforderlich, sie werden aber für die Übersichtlichkeit (auch von Profis) vorgenommen. Da die Programme mit zunehmendem Lernfortschritt komplizierter werden, sollte man sich diesen Stil von Anfang an zu Eigen machen. Beobachten Sie, wie BlueJ nach der öffnenden Klammer automatisch einrückt und die schließende Klammer an die passenden Position setzt! (Editor-Menü Bearbeiten, Befehl Auto-Layout, Shortcut Strg- Umschalt-I!) Die Einrückposition für Kommentare erreicht man am einfachsten mit der TAB-Taste. Nach dem Kompilieren der Klasse 'Quader' werden wir mit Hilfe von BlueJ Instanzen zu dieser Klasse erzeugen und untersuchen.

7 Instanzen der Klasse Quader erzeugen JAVA-Einführung, Seite 7 Wenn die Klasse 'Quader' erfolgreich compiliert wurde, ist das Symbol für diese Klasse nicht mehr schraffiert. Um nun eine Instanz von dieser Klasse zu erzeugen, klicken wir mit der rechten Maustaste auf das Klassensymbol. Aus dem sich öffnenden Kontextmenü wählen wir zunächst new Quader() aus. Der (Standard-) Konstruktor wird ausgeführt, nachdem wir einen Namen für die Instanz festgelegt haben. Auf dem Hauptfenster erscheint unten ein Symbol für das soeben erzeugte Objekt. Wir können den Vorgang wiederholen und somit weitere Instanzen derselben Klasse erzeugen. Wählen wir das nächste Mal aus dem Kontextmenü new Quader(la,br,ho) aus, so werden wir zum Ausführen des zweiten Konstruktors nach den Werten für die Parameter la, br und ho gefragt: Im oberen Abschnitt des Dialogfensters wird der Kommentar angezeigt, der im Quelltext dem Konstruktor vorangestellt worden war. Klicken wir nun mit der rechten Maustaste auf ein rotes Objektsymbol, so können wir u.a. aus dem Kontextmenü auswählen, ob wir das Objekt löschen oder untersuchen (inspizieren) wollen. Das Inspizieren zeigt uns, welche Werte die Variablen laenge, breite und hoehe besitzen. Außerdem können wir über das Kontextmenü die Methode zur Volumenberechnung aufrufen. (Dort gezeigte geerbte Methoden interessieren an dieser Stelle nicht.) Fragen und Aufgaben zum Text 1. Braucht man BlueJ, um Programme in JAVA zu schreiben? 2. Der Begriff Objekt wird manchmal sowohl für Klasse als auch für Instanz verwendet. Erläutern Sie diese Begriffe an dem hier vorgestellten und an einem anderen selbst gewählten Beispiel. 3. Muss eine Klasse einen Konstruktor besitzen? (Probieren Sie es mit einem Testprojekt aus!) 4. Kann eine Klasse verschiedene Konstruktoren besitzen? 5. Was ist im Quader-Quelltext der Unterschied zwischen la und laenge? 6. Ergänzen Sie in der Klasse 'Quader' ein Datenfeld rauminhalt und eine Methode public void berechnerauminhalt(), die aus laenge, breite und hoehe den Rauminhalt berechnet und in das Datenfeld rauminhalt einträgt. [Erläuterungen zu void folgen im nächsten Kapitel.] 7. Testen Sie die Methode von Aufgabe 6, indem Sie eine Quaderinstanz vor und nach Ausführen dieser Methode untersuchen (inspizieren).

8 JAVA-Einführung, Seite 8 2. Zweites Projekt: Bankkonto (Bank_1) In diesem Projekt werden wir eine Klasse 'Konto' erstellen. Dann werden zwei Instanzen dieser Klasse erzeugt, die Girokonten darstellen sollen. Mit Hilfe geeigneter Methoden sollen Einzahlungen und Abhebungen vom Girokonto möglich sein, aber auch Überweisungen von einem Konto auf das andere. Vorüberlegungen zur Klasse 'Konto' Zunächst überlegen wir uns, welche Eigenschaften für Konto- Instanzen in dieser Klasse festgelegt werden müssen: Ein Konto besitzt auf jeden Fall eine Kontonummer, einen Kontoinhaber und einen Kontostand. Wir benötigen eine Methoden zum Einzahlen, eine zum Abheben, eine zum Überweisen. Aber auch zum Auslesen des Kontostands werden wir eine Methode verwenden. Diese Vorüberlegungen ( Entwurf eines Modells ) sind von der Programmiersprache noch weitgehend unabhängig. Erstellen des Konto-Projekts in BlueJ: Wir starten BlueJ und beginnen ein neues Projekt, dem wir den Namen Bank_1 geben (ein weiteres Bank-Projekt werden wir dann Bank_2 nennen). Beachten Sie die Hinweise zur Readme.txt Datei sowie zu den Kommentaren vom ersten Beispiel. Bei den Variablen (Datenfelder) lernen wir neue Datentypen kennen (bisher wurde nur int verwendet): Der Typ double lässt zu, dass Zahlen mit Dezimalkomma (bzw. Dezimalpunkt) als Wert zugewiesen werden können. Für den Kontoinhaber soll ein Name zugewiesen werden und nicht eine Zahl oder Nummer. Hier wird der Typ String verwendet. Genau genommen ist String gar kein Variablentyp, sondern eine Java-Klasse, damit wird auch der Großbuchstabe am Wortanfang gerechtfertigt. In JAVA wird im Gegensatz zu einigen anderen Programmiersprachen zwischen Groß- und Kleinbuchstaben unterschieden. Klassennamen beginnen üblicherweise immer mit einem Großbuchstaben. Variablen- und Methodennamen beginnen üblicherweise mit einem Kleinbuchstaben. Zur Verbesserung der Lesbarkeit werden bei Wortzusammensetzungen oft mitten im Bezeichner Großbuchstaben verwendet (zum Beispiel getkontostand ). Die Datenfelder werden am Beginn der Klasse festgelegt (wie auch bei der Klasse 'Quader'). Der einfachste Konstruktor könnte als Kontonummer und Kontostand jeweils den Wert 0 zuweisen, als Kontoinhaber "" oder "dummy". Das ist für das Erzeugen mehrerer Konto-Instanzen natürlich nicht sinnvoll also wird man dafür sorgen, dass gleich beim Erzeugen einer Konto-Instanz nach dem Namen und der Kontonummer gefragt wird. Der Kontostand kann mit 0 initialisiert werden, aber auch die Kontoeinrichtung mit einem Startguthaben könnte vorgesehen werden. 'Konto' besitzt nach diesen Überlegungen 3 Datenfelder und 5 Methoden (eine davon ist der Konstruktor), vergl. Kasten oben links. Es folgt der Quelltext für dieses Projekt (im folgenden werden Quelltexte nicht als Screenshot dargestellt, sondern als Text mit Syntax-Hervorhebung; hier außerdem mit Zeilenummern): 1: /** 2: * Es wird eine Klasse 'Konto' programmiert. 3: * 4: B. Spier 5: : */ 7: public class Konto 8: // Instanzvariablen (Datenfelder) Modell der Klasse 'Konto': Klasse: Konto Felder: ktonummer (int) ktoinhaber (String) ktostand (double) Konstruktor: Konto(ktoNr,ktoInh) Methoden: einzahlen() abheben() getkontostand() überweisen(kto, betrag)

9 9: private int ktonummer; 10: private String ktoinhaber; 11: private double ktostand; 12: /** 13: * Konstruktor für Objekte der Klasse 'Konto' 14: * 15: ktonr Parameter für Kontonummer 16: ktoinh Parameter für Kontoinhaber 17: */ 18: public Konto(int ktonr, String ktoinh) 19: // Initialisieren der Datenfelder 20: ktonummer = ktonr; 21: ktostand = 0; 22: ktoinhaber = ktoinh; 23: 24: 25: /** 26: * Auslesen des Kontostands 27: * 28: Wert des Kontostands 29: */ 30: public double getkontostand() 31: 32: return ktostand; 33: 34: 35: /** 36: * Einzahlung vornehmen 37: * 38: betrag Betrag der Einzahlung 39: */ 40: public void einzahlen(double betrag) 41: 42: ktostand = ktostand + betrag; 43: 44: 45: /** 46: * Auszahlung vornehmen, falls Kontostand ausreichend 47: * 48: betr Betrag der Auszahlung 49: */ 50: public void auszahlen(double betr) 51: 52: if (ktostand >= betr) 53: einzahlen(-betr); 54: else // Meldung ausgeben, wenn Konto nicht gedeckt: 55: System.out.println("Das Guthaben reicht nicht aus!"); 56: 57: 58: /** 59: * Überweisung auf ein anderes Konto vornehmen 60: * 61: empfaenger Konto des Empfängers 62: geldbetrag Betrag der Überweisung 63: */ 64: public void ueberweisen(konto empfaenger, double geldbetrag) 65: 66: auszahlen(geldbetrag); 67: empfaenger.einzahlen(geldbetrag); 68: 69: JAVA-Einführung, Seite 9 Auf die Eigenschaft private der Instanzvariablen dieser Klasse wird auf Seite 15 eingegangen. Es werden jetzt die 5 Methoden der Klasse 'Konto' erläutert: 1. Die Methode Konto ist ein Konstruktor, denn sie heißt genauso wie die Klasse. Sie trägt die als Parameter übergebenen Werte in die Datenfelder der jeweiligen Instanz ein.

10 JAVA-Einführung, Seite Mit der Methode getkontostand wird der aktuelle Kontostand ausgelesen. 3. Die Methode einzahlen hat keinen Rückgabewert, deshalb muss sie mit dem reservierten Wort void deklariert werden. Beim Einzahlen eines Betrages wird der Kontostand um diesen Betrag erhöht. Bei der Schreibweise ktostand = ktostand + betrag muss man sich klar machen, dass es sich nicht um eine Gleichung handelt, sondern um eine Wertzuweisung: Zuerst wird der Wert von ktostand + betrag ermittelt, dann wird dieser wieder dem Datenfeld ktostand zugewiesen. Die Schreibweise ist professionellen Programmierern noch zu umständlich, deshalb ist auch die kürzere aber besonders für den Anfänger erheblich schwerer lesbare Schreibweise zugelassen, die dasselbe bewirkt: ktostand += betrag 4. Das Auszahlen entspricht dem Einzahlen eines negativen Betrags, deshalb kann man die Methode zum Einzahlen verwenden. Hier im Beispiel wurde einmal angenommen, dass man das Konto nicht überziehen darf; falls man mehr abheben möchte als der Kontostand beträgt, wird eine entsprechende Meldung ausgegeben. Der Vergleichsoperator >= steht für größer oder gleich. Die weiteren sind <= für kleiner oder gleich und == für gleich (s. S. 13). 5. Die interessanteste Methode ist hier die zum Überweisen. Beim Überweisen wird der angegebene Betrag vom Konto abgehoben und beim angegebenen Konto(-Objekt) eingezahlt. Das Überweisen eines negativen Betrags ist nicht verhindert, woraus sich natürlich ein Auftrag zur Programm-Verbesserung ergibt! Die Syntax für die if-anweisung kann der Methode auszahlen entnommen werden. Hinweis zum Ausführen des Konstruktors: Der Kontoinhaber muss mit Anführungszeichen ("Meier") eingegeben werden! Probieren Sie das Überweisen aus, nachdem mindestens zwei Konten erzeugt worden sind und auf das Absender-Konto ein (positiver) Betrag eingezahlt wurde! Als Parameter muss hier der Name des Konto-Objekts für das Empfängerkonto eingegeben werden, dies kann auch mit Mausklick auf das Objektsymbol erfolgen. Fragen und Aufgaben zum Text 8. Wie verfährt ein Konto im dargestellten Quelltext bei einer Überweisung, wenn die Deckung nicht ausreicht? Testen Sie es, überprüfen Sie die Kontostände! 9. Steht in der Methode ueberweisen die Variable empfaenger für den Inhaber des Empfängerkontos oder für die Konto-Instanz des Empfängerkontos? Begründen Sie! Erstellen einer vollständigen Übersicht zur Klasse 'Konto' Wir wählen den Menüpunkt Werkzeuge- Dokumentation erzeugen. Dieser Menüpunkt erstellt eine html-seite (Text-Format für Web- Seiten) und zeigt sie im Standard- Browser an (es dauert vielleicht ein Weilchen). Auf dieser html-seite ist alles beschrieben, was als public deklariert ist die als private deklarierten Datenfelder erscheinen nicht. Wer unsere Klasse 'Konto' verwenden will, muss nicht wissen, ob wir die intern verwendete Variable für die Kontonummer kontonummer oder ktonr genannt haben, weil er darauf nicht zuzugreifen braucht (s. auch S. 15).

11 JAVA-Einführung, Seite 11 Wenn Programmierer Java-Klassen austauschen oder weitergeben, geben sie in der Regel auch die Dokumentation mit. Die Klassen können als Quelltext (Datei mit der Extension.java ) oder als compilierte Klasse (Extension.class ) weitergegeben werden. Sie finden diese Dateien, wenn Sie mit dem Windows-Explorer den Ordner aufsuchen, in dem Sie Ihr Projekt gespeichert haben. Die Dokumentation zeigt Ihnen außer den Bezeichnungen der öffentlichen Methoden auch die Bedeutung der Kommentare, die Sie mit '/**' eingeleitet haben: Sie finden nicht nur die Kommentare zu den Methoden in der Method Summary wieder, sondern bei der differenzierten Beschreibung der einzelnen Methoden (weiter unten) auch die Bedeutung der Parameter oder die Bedeutung des Rückgabewerts der Methode getkontostand. Klicken Sie in der Constructor Summary auf den Klassenbezeicher 'String': Sie werden auf eine völlig gleichartig aufgebaute Webseite geführt, welche die Klasse 'String' beschreibt. Auf diesen Typ von Webseiten trifft man (fast) immer, wenn man Erklärung zu JAVA-Klassen sucht. Kommentare, die dagegen mit // eingeleitet wurden (einzeilige Kommentare), sind als Notizen aufzufassen, die der Programmierer für sich selbst (oder einen Leser des Quelltextes) angefertigt hat. Das gilt auch für die mehrzeiligen Kommentare, die zwischen '/*' und '*/' stehen. Fragen und Aufgaben zum Text 10. Untersuchen Sie, wie sich die Dokumentation der Klasse ändert, wenn Sie vor einem der Datenfelder das Schlüsselwort private durch public ersetzen! (Siehe auch Seite 15.) 11. Untersuchen Sie, wie sich die Dokumentation der Klasse ändert, wenn Sie vor einem der Datenfelder das Schlüsselwort private (bzw. public) entfernen (machen Sie dies anschließend für die weitere Verwendung des Projekts rückgängig!). Testen Sie auch den Shortcut Strg-j. Dieses Beispiel hat gezeigt, dass Instanzen auch auf Methoden anderer Instanzen zugreifen können: Beim Überweisen ruft das überweisende Konto die Methode einzahlen des empfangenden Kontos auf. Die Syntax dafür erfordert die Angabe des Objekts, dessen Methode aufgerufen werden soll, sowie den Namen der Methode als Trennzeichen steht dazwischen ein Punkt. Es mag als unbefriedigend erscheinen, dass beim Überweisen von einem Konto auf ein anderes jeweils der Name des Kontos eingegeben werden muss, und dass es hier nicht über die Eingabe der Kontonummer geht. Die Ursache liegt darin, dass es kein übergeordnetes Objekt gibt, das die Fähigkeit besitzt, aus der Kontonummer zu ermitteln, welche Kontoinstanz dazu gehört. Wenn man bei einer Überweisung eine Kontonummer als Parameter übergeben möchte, müssten alle vorhandenen Kontoinstanzen daraufhin durchsucht werden, ob sie die betreffende Kontonummer besitzen. Wenn das Konto nicht gefunden wird, muss die Überweisung abgelehnt werden. Dieser anspruchsvollen Aufgabe widmet sich das folgende Kapitel. 3. Drittes Projekt: Bank_2 Legen Sie ein neues Projekt mit dem Namen 'Bank_2' an. Dieses Projekt verwendet wieder eine Klasse 'Konto', dessen Quelltext fast vollständig mit dem des vorigen Projekts übereinstimmen wird. Klicken Sie nicht auf Neue Klasse, sondern wählen Sie im Menü Bearbeiten / Klasse aus Datei hinzufügen...! So können Sie aus Bank_1 die Klasse Konto ins Projekt Bank_2 kopieren. Bearbeiten Sie jetzt in 2 Punkten den Quelltext dieser Klasse: Als erstes löschen Sie die Methode ueberweisen der Klasse 'Konto' im Projekt Bank_2, denn Überweisungen wird die noch zu erstellende Klasse 'Bank' übernehmen. Die Klasse 'Konto' benötigt aber noch eine kurze Methode getkontonummer(): public int getkontonummer() return ktonummer; Ergänzen Sie diese Methode, gern auch mit den Kommentaren für die Dokumentation!

12 JAVA-Einführung, Seite 12 Anschließend erstellen wir eine weitere Klasse in diesem Projekt mit dem Namen 'Bank' dies wird damit unser erstes Projekt, in dem wir zwei Klassen definieren. Die Konten, die im Bankmodell verwaltet werden sollen, müssen in irgendeiner Form gespeichert werden. JAVA stellt dafür die Klasse ArrayList zur Verfügung. Instanzen dieser Klasse sind Listen-Objekte, sie besitzen Methoden zum Verwalten der Listenelemente. Die wichtigste ist die zum Hinzufügen. Natürlich kann eine solche Liste eingetragene Elemente auch wieder löschen, eine Kontoauflösung ist aber hier bei unserem Bankmodell nicht vorgesehen. Damit solche Listen-Objekte vielseitig sind, verwalten sie nur Zeiger auf die eingetragenen Elemente, aber keine Information darüber, von welchem Typ die eingetragenen Elemente sind. Die Liste merkt Modell der Klasse 'Bank': Klasse Bank Felder: Liste der Konten Konstruktor Bank() Methoden neueskonto() einzahlen() abheben() getkontostand() ueberweisen() sich also in unserem Beispiel nicht, ob ein Konto oder ein Quadrat eingetragen ist die Konsequenzen zeigen sich, wenn man ein Element aus der Liste verwenden will (s.u.). Der Quelltext der Klasse 'Bank' wird nun in Abschnitten erläutert: 1: import java.util.*; // macht ArrayList verfügbar! 2: /** 3: * Die Klasse Bank kann in einer Liste mehrere Konten verwalten, 4: * zwischen denen Überweisungen ausgeführt werden können. 5: * 6: B.Spier 7: : */ 9: public class Bank 10: 11: // einzige Instanzvariable 12: private ArrayList kontoliste; 13: 14: /** 15: * Konstruktor für Objekte der Klasse Bank 16: */ 17: public Bank() 18: 19: // Instanzvariable initialisieren 20: kontoliste = new ArrayList(); 21: Da ArrayList nicht ein gewöhnlicher Typ wie z.b. int ist, sondern eine Klasse, muss von dieser Klasse erst eine Instanz (kontoliste) erzeugt werden, bevor sie verwendet werden kann. Das geschieht mit der Zeile 20 im Konstruktor für das Bankobjekt: Hier wird der Konstruktor von ArrayList aufgerufen. Diese Syntax (new...) haben Sie vielleicht auch schon bei der Erzeugung der Quadrate oder Konten von Hand bei BlueJ bemerkt. 22: /** 23: * Einrichten eines neuen Kontos: 24: * Es ist kein Parameter für den Inhaber vorgesehen, weil das Testen 25: * des Programms dann einfacher ist. Alle Konten gehören "Meier"! 26: kontonr für die Kontonummer 27: */ 28: public void neueskonto(int kontonr) 29: 30: Konto neukto; // Variable neukto vom Typ Konto 31: neukto = new Konto(kontoNr,"Meier"); // Konto-Objekt erzeugen 32: kontoliste.add(neukto); // Konto in die Liste eintragen 33:

13 JAVA-Einführung, Seite 13 Anders als im vorigen Beispiel werden neue Konten jetzt nicht mehr durch BlueJ nach Rechtsklick auf das Klassensymbol für 'Konto' erzeugt, sondern durch die Methode neueskonto eines Bankobjekts. Wir müssen also erst ein Bankobjekt erzeugen, dann können wir nach Rechtsklick auf das Objektsymbol dessen Methode neueskonto() aufrufen, die den Konstruktor der Klasse 'Konto' verwendet. Das neu erzeugte Konto besser eine Referenz darauf (auch Zeiger genannt) wird dann mit add in die Liste eingetragen. Eine Bankinstanz verwaltet so jedes erzeugte Konto in seiner Liste der Konten. 35: /** 36: * Suchen des Konto-Objekts an Hand seiner Kontonummer 37: * 38: num für die Kontonummer 39: Referenz auf das (hoffentlich!) gefundene Konto(-Objekt) 40: */ 41: private Konto findbynumber(int num) 42: 43: int i; // Zähler für die Schleife, Referenzen 44: Konto einkto, daskto; // Zeiger für laufendes bzw. gefundenes Kto. 45: // (in der Schleife benötigte Variablen) 46: i = 0; // Initialisierung für die Schleife 47: daskto = null; // Null-Zeiger, steht für ungültiges Konto 48: while (i < kontoliste.size()) // Schleifenkopf 49: // Alle Konten in der Liste werden geprüft. 50: einkto = (Konto) kontoliste.get(i); // Ein Konto aus der Liste 51: if (einkto.getkontonummer() == num) // KtoNr. prüfen 52: daskto = einkto; // hier: Konto gefunden! 53: i++; // entspricht i = i + 1; 54: 55: if (daskto == null) 56: System.out.println("ungültige Kontonummer!"); 57: return daskto; // Referenz auf das gefundene Konto (oder null) 58: Mit Hilfe der Methode findbynumber kann das Bankobjekt alle Konten, die in die Liste eingetragen sind, nach der Kontonummer durchsuchen. Wir verwenden hier eine while-schleife, weil dies die einfachste Schleifenprogrammierung ist; die Kommentare erklären schon fast alles: Wenn in der Liste z.b. 5 Konten eingetragen sind, wird die Schleife 5-mal durchlaufen, wobei i nacheinander die Werte 0, 1,, 4 annimmt. Die Schleife wird auch dann 5 mal durchlaufen, wenn das gesuchte Konto schon früher gefunden wurde das ist zwar keine optimale Programmierung, erlaubt aber eine leicht verständliche Form unserer ersten Schleife (mehr zu while s.s. 39). Zeile 50: Weil die Liste mit get(i) nur einen untypisierten Zeiger auf das Listenelement am Platz i zurück gibt, muss dieser vor der Zuweisung an die Variable einkonto eine Typumwandlung erfahren. Das geschieht durch das vorangestellte (Konto) der Fachmann spricht dabei von einem Cast-Operator. Eine unpassende Typumwandlung kann schlimme Fehler verursachen, deshalb gibt es beim Übersetzen eine Warnmeldung! (Ergänzende Information siehe Anhang, Seite 41) Die Methoden einzahlen und abheben verwenden diese Methode findbynumber: 60: /** 61: * Einzahlen auf ein Konto unter Angabe der Parameter 62: * 63: kontonr für die Kontonummer 64: betrag für den Geldbetrag 65: */ 66: public void einzahlen(int kontonr, double betrag) 67: 68: Konto daskonto; 69: daskonto = findbynumber(kontonr); 70: if (daskonto!= null) daskonto.einzahlen(betrag); 71:

14 JAVA-Einführung, Seite 14 Zeile 70 prüft, ob überhaupt eine Konto mit der angegebenen Nummer gefunden wurde: In JAVA steht das Ausrufezeichen für die Negation,!= heißt also ungleich. Die if-anweisung ist hier ohne else verwendet worden. Bei ungültiger Kontonummer wurde ein Hinweis bereits von findbynumber ausgegeben. Weil die Anweisung in Zeile 70 bzw. 83 so kurz ist, wird auf den sonst bei if-anweisungen üblichen Zeilenumbruch verzichtet. 73: /** 74: * Abheben von einem Konto unter Angabe der Parameter 75: * 76: kontonr für die Kontonummer 77: betrag für den Geldbetrag 78: */ 79: public void abheben(int kontonr, double betrag) 80: 81: Konto daskonto; 82: daskonto = findbynumber(kontonr); 83: if (daskonto!= null) daskonto.auszahlen(betrag); 84: Abrufen des Kontostands (können Sie eine Prüfung auf gültige Kontonummer ergänzen?): 86: /** 87: * Abrufen des Kontostands unter Angabe der Kontonummer 88: * 89: kontonr für die Kontonummer 90: Kontostand 91: */ 92: public double kontostandabrufen(int kontonr) 93: 94: Konto daskonto = findbynumber(kontonr); 95: return daskonto.getkontostand(); 96: Haben Sie bemerkt, dass die Deklaration einer Variablen (daskonto) und die Zuweisung an diese in einem einzigen Schritt erfolgen kann? Hier wird der Zeiger auf das gefundene Konto zugewiesen. Nun zur Methode zum Überweisen von einem Konto auf ein anderes: 98: /** 99: * Überweisen unter Angabe der Parameter 100: * 101: ktonra Konto des Absenders 102: ktonrb Konto des Empfängers 103: betrag Betrag der Überweisung 104: */ 105: public void ueberweisen(int ktonra, int ktonrb, double betrag) 106: 107: Konto empf, absd; // Konto-Objekte 108: absd = findbynumber(ktonra); 109: empf = findbynumber(ktonrb); 110: if ((absd!= null) & (empf!= null)) 111: 112: absd.auszahlen(betrag); 113: empf.einzahlen(betrag); 114: 115: 116: Hier muss die Gültigkeit beider Kontonummern geprüft werden. Nur wenn Absender-Konto absd und Empfänger-Konto empf gültig sind, wird die Überweisung ausgeführt. Die logische UND- Verknüpfung wird in JAVA durch das &-Zeichen dargestellt. Da im WENN-Fall zwei Anweisungen stehen, sind geschweifte Klammern zur Kennzeichnung von Anfang und Ende des Blocks erforderlich. Dasselbe gilt auch für den SONST-Fall, wenn er aus mehreren Anweisungen besteht.

15 JAVA-Einführung, Seite 15 (Die Klammern dürfen selbstverständlich auch gesetzt werden, wenn sie nur eine einzige Anweisung einschließen). Wenn sich der Quelltext für die Klasse 'Bank' fehlerfrei übersetzen ließ, können wir jetzt unser Bankinstitut eröffnen und Kundenkonten einrichten, um die von uns programmierten Klassen und deren Instanzen zu testen! Also: Bankinstanz mit Rechtsklick erstellen, Bank-Namen wählen (z.b. "JGiro", "DieBank" o.ä.) und dann in dieser Bank mindestens 2 Konten einrichten. Nach einer Einzahlung sollte dann auch eine Überweisung möglich sein. Die Klasse 'Konto' wird jetzt nicht mehr von uns, sondern nur von dem Bank-Objekt benutzt. Diese Beziehung Bank verwendet Konto (allgemein <Klasse> verwendet <AndereKlasse> ) stellt BlueJ durch einen gestrichelten Pfeil in der Projektübersicht dar. Fragen und Aufgaben zum Text 12. Ergänzen Sie in einem der Bank-Projekte eine Methode, die zur Kontonummer den Namen des Kontoinhabers zurück gibt. 13. Ein Objekt A soll die Methode tuirgendwas() eines Objekts B aufrufen. Wie ist der Aufruf zu schreiben? 14. Im Projekt Bank seien zwei Instanzen erzeugt: HASPA und DEUTSCHE_BANK. Mit beiden Instanzen wurden mehrere Konten erzeugt. Welche Überweisungen sind möglich? Informationen zu private und public Bisher wurden alle Datenfelder als private deklariert. Das ist üblich, wenn keine fremde Instanz direkten Zugriff auf den Wert einer solchen Variablen zu haben braucht. Stellen wir uns vor, von der Klasse 'Konto' haben wir keinen eigenen Quelltext, sondern nur die compilierte Klassendatei und die Dokumentation. Wir erstellen eine Klasse 'Bank', welche Instanzen der Klasse 'Konto' verwalten soll. Dadurch, dass ktostand als private deklariert ist, kann nur über öffentliche Methoden (getkontostand, auszahlen, einzahlen) auf den Kontostand zugegriffen werden. Der Programmierer der Klasse 'Konto' könnte diese Methoden so erweitern, dass erst eine Geheimnummer eingegeben werden muss, bevor der Kontostand ausgelesen oder eine Auszahlung/Überweisung vorgenommen werden kann. Methoden, die den Kontostand ändern, könnten auch jeweils einen Text ausgeben, der einem Kontoauszugs-Eintrag entspricht. Wäre ktostand jetzt public, so könnten wir in der Klasse 'Bank' die folgende Methode programmieren, die eine Berechtigungsprüfung umgeht, indem sie auf den Kontostand direkt zugreift: public void ueberweisen(int ktonra, int ktonrb, double betrag) Konto empf, absd; // Konto-Objekte absd = findbynumber(ktonra); empf = findbynumber(ktonrb); if ((absd!= null) & (empf!= null)) absd.ktostand -= betrag; // Kontostand verringern empf.ktostand += betrag; // Kontostand erhöhen Nicht nur Variablen, auch Methoden können private oder public sein. Unsere Klasse Bank benötigt die Methode findbynumber, die wir aber beim simulierten Zahlungsverkehr mit der Maus im BlueJ-Fenster nie aufzurufen brauchen und deshalb als private deklariert haben.

16 JAVA-Einführung, Seite 16 Hätten wir sie als public deklariert, wäre die Auswahl der möglichen Methoden beim Rechtsklick auf ein Bankinstanzsymbol um eine unnötige Zeile unübersichtlicher geworden, wie die Abbildung zeigt. Grundsätzlich sollten also nur die Methoden und Datenfelder öffentlich sein, auf die der Zugriff von außen tatsächlich benötigt wird. 4. Viertes Projekt: Fahrkartenautomat Mit diesem Projekt testen Sie sich, wie weit Sie eigenständig (nach wenigen Vorgaben) programmieren können. Fast alles, was Sie benötigen, wurde in den bisherigen Kapiteln genannt: Namen für das Projekt festlegen (also einen Ordner einrichten), neue Klasse erzeugen (wieder einen Namen überlegen), private Datenfelder deklarieren, diese mit dem Konstruktor initialisieren, weitere Methoden programmieren (siehe folgende Punkte 1, 2, 3, 5). Orientieren Sie sich dabei an den bisher erstellten Programmen! Unser virtueller Fahrkartenautomat soll folgendes können: 1. Der Anwender muss einen Fahrpreis für die gewünschte Fahrkarte eingeben können (Festlegung des zu zahlenden Betrags, z.b. 4.3 für 4,30 ), die Klasse benötigt dafür eine sinnvoll benannte Methode. Ein Datenfeld fahrpreis vom Typ double muss dann den gewünschten Fahrpreis speichern. Zum Testen des Automaten ist es zweckmäßig, bereits im Konstruktor den Fahrpreis mit z.b. 3.8 zu initialisieren dann muss man nicht bei jedem Neustart erst einen Fahrpreis eingeben. 2. Der Anwender muss nach der Festlegung des Fahrpreises Geld einwerfen können (z.b. mehrmals 1 oder 0,50 o.ä.), eine Prüfung auf tatsächlich möglichen Münzwert entfällt. Die Klasse benötigt im Prinzip also eine Methode einzahlen(betrag) wie im vorigen Projekt. Ein weiteres Datenfeld einwurf vom Typ double muss den bereits gezahlten Betrag speichern. 3. Eine Methode druckefahrkarte soll einen von der bisherigen Zahlung abhängigen Text ausgeben: Zuerst wird der gewählte Fahrpreis ausgedruckt, dann der bisher gezahlte Betrag. Wenn dieser noch nicht reicht, wird der Fehlbetrag ausgegeben. Wurde genug gezahlt, ist der Kauf abgeschlossen, und die Höhe des Wechselgeldes wird ausgegeben. Außerdem muss der eingeworfenen Betrag auf 0 zurückgesetzt werden. Info zum Drucken : System.out.println (print line) gibt eine Zeile, also Text mit anschließendem Zeilenumbruch aus. Neu ist hier: System.out.print System.out.println("BlueJ-Bahngesellschaft"); System.out.print("Fahrkahrte zu "); // Text System.out.println(fahrPreis); // Wert... (u.s.w.) (ohne ln) gibt Text aus, ohne dass sich ein Zeilenumbruch anschließt. Sie können die beiden letzten Zeilen aber auch zu einer einzigen zusammenfassen: System.out.println("Fahrkarte zu " + fahrpreis); Mit + können Strings aneinander gehängt werden, in diesem Fall wandelt JAVA die Zahl fahrpreis dazu in einen String um. 4. Diesen Punkt können Sie ergänzen, nachdem alles andere fehlerfrei läuft:

17 JAVA-Einführung, Seite 17 Die Klasse soll ein drittes Datenfeld gesamteinnahmen besitzen, in dem die Einnahmen bei jedem Kauf eines Fahrscheins aufsummiert werden. Es genügt, dass dieses Datenfeld durch Inspizieren geprüft werden kann oder möchten Sie eine Methode getgesamteinnahmen() schreiben? 5. Optional können Sie den Fahrkartenautomaten verbessern, indem Sie eine Methode zum Abbrechen des Fahrkartenkaufs ergänzen. Sie sollte als Text die Rückzahlung des bisher eingeworfenen Betrags melden. Was muss sie sonst noch tun? Die Abbildung zeigt ein mögliches Ergebnis des Projekts: Sie können den Namen des Projekts, den Namen der Klasse und den aktuell gewählten Namen für die Instanz dieser Klasse herauslesen. Ein Fahrpreis wurde festgelegt, Geld wurde eingeworfen. Das Bild zeigt das Fenster nach Aufruf der Methode druckefahrkarte. Mit Sicherheit wird Ihr Ergebnis noch nicht so wie hier aussehen können, denn hier wurde die Ausgabe auf 2 Nachkommastellen und mit Dezimalkomma formatiert. Diese Formatierung rundet zugleich, so dass Rechenfehler ausgeglichen werden. Es folgen hierzu weitere Informationen: Wie entstehen Rechenfehler beim Computer? Computer rechnen im Zweiersystem. Brüche wie 1 2, 1 4, 1 8, 5 8 sind in diesem System abbrechende Dualbrüche. Brüche, deren Nenner jedoch keine Zweierpotenz sind, sind periodische Dualbrüche. Der Grund ist der, den wir aus dem Dezimalsystem kennen: Wenn der Nenner sich nicht aus Potenzen von 2 oder 5 zusammensetzt, wird der Dezimalbruch periodisch. 2 und 5 sind Teiler der Basis 10, daher ist z.b. 3 = 3 = 12 =0, abbrechend. 4 =0,36 11 ist dagegen periodisch. Da die Basis 2 nur die 2 als echten Teiler hat, können im Zweiersystem nur Brüche wie die oben genannten abbrechend sein, 1 5 oder 1 10 sind in diesem System dagegen periodisch, also unendlich lang. Da der Computer aber Zahlen nur in wenigen Bytes speichert, muss er die Darstellung abbrechen. Selbst wenn dabei richtig gerundet wird, entstehen Ungenauigkeiten. Die Ungenauigkeit zeigt sich beim Fahrkartenautomaten z.b. bei einem Fahrschein zu 3,80, wenn 0,10 bezahlt sind. Als Restbetrag werden 3, berechnet! (Probieren Sie es aus!) Zahlen formatieren JAVA stellt verschiedene Methoden zum Formatieren von Zahlen zur Verfügung. In JAVA sind alle Methoden an Klassen gebunden, wir verwenden hier die Methode format der Klasse String. String.format("Noch zu zahlen: %.2f ",(fahrpreis einwurf)) liefert einen formatierten String für den Wert von (fahrpreis einwurf), er enthält am Beginn den Text Noch zu zahlen:. Das %-Zeichen kennzeichnet das Einfügen aus nachfolgend angegebenen Parametern..2 kennzeichnet die Genauigkeit von 2 Nachkommastellen, f kennzeichnet die Umwandlung eines float- oder double-werts (Fließkommazahl). Die weiteren Zeichen folgenden dem eingefügten String, sodass das Ergebnis z.b. im Falle des Werts

18 JAVA-Einführung, Seite der String Noch zu zahlen: 0,20 wird, weil die Methode zugleich auch rundet. Die Umwandlung des Dezimalpunkts in ein Komma erfolgt auf Grund der Spracheinstellung des Betriebssystems. Die format-methode der Klasse String ist sehr vielseitig, mit ihr können z.b. auch Datumswerte formatiert werden (siehe nachfolgendes Kapitel). Ein weiteres Beispiel für die Formatierung auf 2 Nachkommastellen: System.out.println(String.format("Fahrkahrte zu %.2f ",fahrpreis)); Diese Art der Formatierung können Sie überall dort verwenden, wo ein Euro-Wert mit 2 Nachkommastellen ausgeben werden soll. 5. Fünftes Projekt: Person (Vererbung / GregorianCalendar) Ein bedeutendes Merkmal objektorientierter Programmierung (und darum geht es bei JAVA) ist die Möglichkeit, bereits programmierte Klassen als Ausgangsbasis für weitere Klassen mit zusätzlichen Datenfeldern und Methoden zu verwenden. Die so von einer Basisklasse abgeleiteten Klassen erben die Datenfelder und Methoden der Basisklasse, wodurch der Quelltext der neuen Klasse weniger umfangreich ist. Die Verwendung fertiger Basisklassen ist für den Programmierer eine deutliche Arbeitserleichterung. Dieses Prinzip werden wir in Kapitel 6 nutzen, um mit Hilfe bereits in JAVA vorgegebener Klassen Applets (Anwendungen) zu programmieren, die in einem Browser ablaufen können. Erzeugen Sie das neue Projekt mit dem Namen Vererbung. Erstellen Sie in diesem Projekt eine Klasse mit der Bezeichnung Person. Eine Person hat einen Vornamen, einen Nachnamen, ein Geburtsdatum. Außerdem soll vermerkt werden können, ob die Person Informatiker ist oder nicht. Vor- und Nachname sind Strings, das Geburtsdatum müssen wir als Instanz der in JAVA vordefinierte Klasse GregorianCalendar festlegen (die Bezeichnung bezieht sich auf den Gregorianischen Kalender, der seit dem 15. Oktober 1582 regelt, welche Jahre Schaltjahre sind). Die Informatiker-Eigenschaft kann nur die Werte true oder false annehmen, dieser Typ heißt boolean. Wenn eine Person geboren wird, steht das Geburtsdatum fest darum wird hier vorgeschlagen, dass der Konstruktor beim Erzeugen einer Instanz der Klasse Person Tag, Monat und Jahr der Geburt erfragt.

19 JAVA-Einführung, Seite 19 Wenn wir jetzt eine Instanz erzeugen, müssen wir also Werte für t, m, j eingeben. Da GregorianCalendar die Monate als Zahlen von 0 bis 11 verwaltet, muss die Eingabe für m um 1 vermindert werden! Beim Inspizieren der Person werden Sie feststellen, dass Sie das Geburtsdatum nicht in der Form von Tag, Monat und Jahr auslesen können. Möchten Sie eine Methode getgeburtsdatum() schreiben, die dieses Datum als String zurückgibt? Dazu müssen Sie herausfinden, wie aus der Instanz geburtsdatum ein Datumsstring gewonnen werden kann! Sie müssen jetzt keine Suchmaschine oder Foren bemühen, holen Sie sich mit BlueJ (siehe Abb.) die Hilfe über Klassenbibliotheken! Sie führt auf die Webseite (Stand vom September 2014) Sie finden dann in der Beschreibung der Klasse String etwas weiter unten die Beschreibung der beiden format-methoden. Klicken Sie wie in der Abbildung angedeutet auf format, von dort können Sie zu einer so umfangreichen Beschreibung gelangen, wie ein format string aussehen kann, dass Sie erleichtert sein dürften, einen Weg zur formatierten Ausgabe eines Datums auch im folgenden Absatz zu finden:

20 JAVA-Einführung, Seite 20 Die folgende Methode gibt das in geburtsdatum gespeicherte Datum formatiert als String zurück: public String getgeburtsdatum() return String.format("%1$td.%1$tm.%1$tY", geburtsdatum); Vielleicht gelingt es Ihnen ja, mit Hilfe der angegebenen Webseite das Datum auch so zu formatieren, dass zusätzlich noch der Wochentag ausgegeben wird (Aufgabe 22)! Anmerkungen: Methoden, die Daten auslesen, beginnen üblicherweise mit get. Daran lehnt sich hier der Vorschlag für den Methodennamen zum Auslesen des Geburtsdatums an. Wenn Sie solche Sprachvermischungen vermeiden wollen, können Sie getdayofbirth oder holegeburtsdatum verwenden. Ein Vorteil deutscher Wortanteile ist der, dass sofort erkennbar ist, ob vordefinierte oder eigene Bezeichner verwendet sind. Zur Übung und damit unsere Person etwas mehr zu vererben hat (darum geht es ja in diesem Kapitel), folgen zunächst noch einige Aufgaben: Fragen und Aufgaben zum Text 15. Wie ändert sich die formatierte Datumsausgabe, wenn Sie im format-string für das Jahr ein kleines y verwenden? 16. Damit die Person einen Namen bekommt, wird eine Methode setname(string v, String n) benötigt, mit der Vor- und Nachname festgelegt werden. Schreiben Sie diese. 17. Schreiben Sie eine Methode setinfomatikeryes(), die das Datenfeld informatiker auf true setzt. 18. Schreiben Sie eine Methode setinfomatikerno(), die informatiker auf false setzt. 19. Schreiben Sie eine Methode setinfomatiker(boolean x), die informatiker auf einen Wert setzt, den der Anwender eingibt. 20. Schreiben Sie eine Methode getganzername(), die die Kombination aus Vor- und Nachnamen als String zurück gibt. 21. Schreiben Sie eine Methode druckeganzennamen(), die mit System.out.println den vollständigen Namen auf das Konsolenfenster ausgibt. Diese Methode sollte getganzername verwenden! 22. Schaffen Sie es, das Geburtsdatum einschließlich Wochentag auszugeben? Berechnung des Alters einer Person Wir ergänzen jetzt noch eine Methode, die das Alter der Person liefert. Dafür brauchen wir eine Instanz von GregorianCalender, die das aktuelle Datum enthält. Wir nennen sie heute und erhalten sie, indem wir den Konstruktor ohne Parameter aufrufen. Dann schließt sich die Berechnung des Alters an, die nicht ganz einfach ist, weil zunächst festgestellt werden muss, ob die Person im laufenden Jahr bereits Geburtstag hatte (oder gerade hat). Die Verwendung einer Hilfsvariablen hatteschongeburtstag macht den folgenden Quelltext (hoffentlich) leicht verständlich:

21 JAVA-Einführung, Seite 21 public int getalter() boolean hatteschongeburtstag = false; // wird nach Prüfung evt. true GregorianCalendar heute = new GregorianCalendar(); // Kalenderobjekt für // heutiges Datum if (heute.get(calendar.month) > geburtsdatum.get(calendar.month)) // Person hatte in diesem Jahr hatteschongeburtstag = true; // schon Geburtstag. Weitere Prüfung else // bei gleichem Monat: if (heute.get(calendar.month) == geburtsdatum.get(calendar.month) & heute.get(calendar.day_of_month) >= geburtsdatum.get(calendar.day_of_month)) // Tag vergleichen hatteschongeburtstag = true; if (hatteschongeburtstag) return heute.get(calendar.year) - geburtsdatum.get(calendar.year); else return heute.get(calendar.year) - geburtsdatum.get(calendar.year) - 1; Vererbung Jetzt sollen zwei weitere Klassen erstellt werden: Eine Klasse Schüler und eine Klasse Lehrer. Da Schüler und Lehrer natürlich Personen sind, sollen auch sie Namen und Geburtsdatum besitzen. Zusätzlich sollen Schüler aber ein Datenfeld für ihre Schulklasse (z.b. "11c", also vom Typ String) besitzen. Lehrern geben wir keine Schulklasse, dafür aber zwei Unterrichtsfächer (weil das für die meisten Lehrer am Gymnasium zutrifft). Natürlich könnte man den Quelltext von Person kopieren, um alles zu übernehmen, und man müsste nur die Klassenbezeichnung (Objektklasse, nicht Schulklasse der Begriff Klasse ist in diesem Abschnitt leider nicht eindeutig!) im Konstruktor anpassen. Für den Zugriff auf Unterrichtsfächer bzw. die Schulklasse wären noch wenige Methoden zu ergänzen. Dann hätten wir aber einen großen Teil des Quelltextes 3 mal zu verwalten. Ein Fehler in der Berechnung des Alters müsste in 3 Textdateien korrigiert werden. Um solche Nachteile zu vermeiden, wurde die Möglichkeit geschaffen, von vorhandenen Klassen erweiterte Klassen abzuleiten. Die abgeleiteten Klassen erben dann alle Eigenschaften und Methoden der Vorgängerklasse. Zunächst erstellen wir in unserem Projekt eine neue Klasse mit der Bezeichnung Schüler (oder Schueler ) und eine weitere mit der Bezeichnung Lehrer. Es gibt bei BlueJ zwei Verfahren, um diese Klassen als Erweiterungen von Person zu deklariereren. Methode 1: Im BlueJ-Fenster wählen wir mit der Maus den Pfeil mit durchgezogener Linie aus und ziehen damit einen Pfeil von Lehrer zu Person. Methode 2: Wir fügen in der Klasse Schüler die zwei Wörter extends Person ein (s. Abb.). public class Schüler extends Person... <u.s.w.>...

22 JAVA-Einführung, Seite 22 Die Konstruktoren der neuen Klassen sollen nun so überarbeitet werden, dass sie Lehrer- bzw. Schülerinstanzen mit Geburtsdatum erzeugen: Ein Konstruktor der abgeleiteten Klasse muss einen Konstruktor der Vorgängerklasse durch Verwendung des Schlüsselworts super aufrufen. Für die Klasse Lehrer sind hier als Beispiel zwei Konstruktoren angegeben. Ganz ähnlich gestalten wir den Quelltext für die Klasse Schüler. /** * Beschreibung der Klasse Schüler. * B.Spier Jan */ public class Schüler extends Person String klasse; /** * Konstruktor für Schüler */ public Schüler(int t, int m, int j) super(t, m, j); klasse = ""; /** * Beschreibung der Klasse Lehrer. * B. Spier Jan */ public class Lehrer extends Person private String fach1, fach2; /** * Konstruktoren für Lehrer */ public Lehrer(int t, int m, int j) super(t, m, j); public Lehrer(int t, int m, int j, String f1, String f2) super(t, m, j); fach1 = f1; fach2 = f2; Wenn Sie jetzt Instanzen von Lehrer und Schüler erzeugen, stehen diesen alle Methoden von Person zur Verfügung. Fragen und Aufgaben zum Text: 23. Ergänzen Sie für die Klasse Schüler eine Methode zum Setzen der Schulklasse! 24. Erzeugen Sie Instanzen von Person, Schüler, Lehrer und testen Sie deren Methoden, so dass z.b. beim Inspizieren von schüler1 die abgebildete Situation entsteht! Überschreiben Wenn eine Klasse eine Vorgängerklasse erweitert, so erbt sie deren Methoden. Manchmal ist es sinnvoll, eine geerbte Methode für die erweiterte Klasse speziell anzupassen. Man könnte zum Beispiel annehmen, dass ein Lehrer auch das Fach Informatik unterrichtet, wenn er Informatiker ist.

23 Es soll jetzt die Methode setinfomatikeryes() speziell für Lehrer erweitert werden, so dass dabei fach2 auf Informatik gesetzt wird. Weil informatiker in Person als private deklariert ist, verwenden wir die geerbte öffentliche Methode setinformatikeryes() von Person. Nun kann aber public void setinformatikeryes() setinformatikeryes(); fach2 = "Informatik"; nicht funktionieren, weil jetzt die Methode des Lehrers immer wieder sich selbst aufruft, anstatt auf die geerbte Methode zuzugreifen! Die Lösung ist das Schlüsselwort super, das wir schon beim Aufruf des geerbten Konstruktors kennen gelernt haben (s. rechts). JAVA-Einführung, Seite 23 Als Nachweis, das dies wirklich funktioniert, ergänzen wir einige Zeilen in der Klasse Schüler: public class Schüler extends Person String klasse; Person einlehrer; // <--- ERGÄNZUNG public Schüler(int ta, int mo, int ja) super(ta, mo, ja); klasse = ""; Methode in der Basisklasse Person (Lösung von Aufgabe 18): einlehrer = new Lehrer(2,5,1961); // <--- ERGÄNZUNG einlehrer.setinformatikeryes(); // <--- ERGÄNZUNG public void setinformatikeryes() informatiker = true; Methode, die in der Klasse Lehrer ergänzt wird, und damit die geerbte überschreibt: public void setinformatikeryes() super.setinformatikeryes(); fach2 = "Informatik" //... Erzeugen Sie jetzt eine Instanz von Schüler. Inspizieren Sie diesen Schüler, inspizieren Sie dann dessen Objekt einlehrer! Dass einlehrer einem Datenfeld vom Typ Person zugewiesen wurde, hat hier keine Auswirkung, es hätte ebenso gut auch ein Feld vom Typ Lehrer verwendet werden können.

24 JAVA-Einführung, Seite Sechstes Projekt: Wir programmieren ein Applet Das Wort Applet ist eine zusammengesetztes Kunstwort, das aus Application (= Anwendung) und Snippet (= Schnipsel) gebildet ist. Es bezeichnet hier ein JAVA-Programm, das in einem Web- Browser läuft. Mit der Bearbeitung dieses Kapitels schreiben Sie also ein Programm, dass unabhängig von BlueJ läuft. Sie können es weitergeben oder auf Ihre Homepage setzen. Es kann auf jedem Computer laufen, auf dem eine JAVA-runtime-engine installiert ist, also auch unter anderen Betriebssystemen als Windows. Auch wenn unser erstes Beispiel nichts Beeindruckendes leistet, so zeigt es doch im Ansatz die Möglichkeiten, die sich mit Applets eröffnen! Wir beginnen ein neues Projekt und legen dafür den Namen Zeichnen_1 fest, denn wir werden auf der Applet-Fläche ein wenig zeichnen. (Kreise? Quadrate? Linien? Ausgefüllte Flächen? Man wird sehen!) Für die neue zu erstellende Klasse wählen wir den Namen Applet1. Wichtig: Art der Klasse ist jetzt nicht die Voreinstellung Klasse, sondern Applet! Das schon recht umfangreiche Quelltext-Gerüst, das BlueJ vorgibt, reduzieren wir in diesem Projekt zunächst auf die folgenden wenigen Zeilen: import java.awt.*; import javax.swing.*; /** * Minimal-Applet * B.Spier Feb.2010 */ public class Applet1 extends JApplet /** * Methode, die für das gewünschte Aussehen der Appletfläche sorgt. * (public: wird von dem Programm aufgerufen, welches das Applet darstellt) g das Graphics-Objekt für dieses Applet */ public void paint(graphics g) // einfacher Text wird im Applet angezeigt. Er beginnt bei x=20 // und y=30, bezogen auf die obere linke Ecke der Appletfläche. g.drawstring("dies ist ein JApplet!", 20, 30); Jetzt erkennen Sie deutlich: Die Klasse Applet1 ist von JApplet abgeleitet. Sie hat eine Fülle von Methoden von JApplet und dessen Vorgängerklassen geerbt (bei Interesse sehen Sie sich die Dokumentation an!). Außerdem sollte Ihnen auffallen: Es gibt hier keine Methode public Applet1() diese Klasse hat also keinen eigenen Konstruktor! Zwar können Sie mit BlueJ eine new-methode aufrufen, das ist dann ein von einem Vorgänger geerbter Konstruktor ohne Parameterübergabe. Den Konstruktor brauchen wir aber nicht, denn zum Ausführen von Applets rufen wir nie einen Konstruktor auf! Das übernimmt die installierte JAVA-Umgebung, wenn ein Applet zum Laufen gebracht wird. Dazu führen Sie folgende Schritte aus:

25 JAVA-Einführung, Seite 25 Klicken Sie mit der rechten Maustaste auf das Applet1-Symbol und wählen Sie den Punkt Applet ausführen. Bevor nun das Applet ausgeführt wird, können Sie zwischen zwei Varianten der Ausführung wählen: Browser oder Appletviewer. Der Appletviewer ist deutlich schneller, weil er nicht eine komplette Browser-Oberfläche laden muss. Nehmen Sie also diesen für den ersten Test dieses Applets. Außerdem können Sie die Breite und Höhe der Applet-Fläche einstellen, die Abbildung zeigt das Applet bei Pixeln. Ob Sie das Applet im Viewer anzeigen, im Browser anzeigen, oder nur die Webseite erstellen: In jedem Fall wird eine html-textdatei erzeugt, die mit jedem Browser dargestellt werden kann. Sie finden sie in Ihrem Projektordner und können Sie von dort (auch ohne BlueJ) mit dem Internet- Explorer (Firefox, GoogleChrome usw.) öffnen. Wählen Sie erneut Applet ausführen, wählen Sie jetzt aber Applet im Browser ausführen. Die Abbildung links stellt das Applet im Internet-Explorer dar. Je nach Sicherheitseinstellungen müssen Sie eventuell die Ausführung von JAVA-Applets zulassen, bevor das Applet angezeigt wird. Die html-seite, die BlueJ für diese Darstellung erzeugt hat, befindet sich im Projektordner und heißt Applet1.html. Unter Umständen zeigen (vor allem ältere) Browser die Hintergrundfläche nicht in weiß, sondern in schwarz. Darum soll als nächstes die Paint-Methode derart erweitert werden, dass vor der Textausgabe der Hintergrund gelöscht wird. Außerdem zeichnen ein wir ein Rechteck, eine Linie, eine Rechteckfläche und eine Kreisfläche: public void paint(graphics g) Rectangle r = getbounds(); // Applet-Position und -Größe holen g.clearrect(r.x, r.y, r.width, r.height); // Hintergrund löschen g.setcolor(new Color(180,200,230)); // Farbe (RGB) setzen g.fillrect(10,10,100,50); // Rechteckfläche zeichnen g.setcolor(color.black); // vordefinierte Farbkonstante g.drawstring("kleine Applet-Demo", 20, 20); g.setcolor(color.red); // vordefinierte Farbkonstante g.filloval(70,30,60,60); // ausgefüllter Kreis g.drawrect(15,40,20,30); // Rechteck-Rand g.setcolor(color.blue); // vordefinierte Farbkonstante g.drawline(40,30,119,119); // Linie (Start-Pos. - End-Pos.) Das abgebildete Applet ist in der Größe erzeugt, Sie können aber die Größe des Appletviewer-Fensters noch nachträglich verändern. Aufbau eines HTML-Quelltextes Jetzt wollen wir uns noch ein wenig mit der html-seite befassen, die BlueJ beim Ausführen im Browser erzeugt. Öffnen Sie dazu die Datei Applet1.html mit dem Windows-Editor. HTML ist die Abkürzung für hypertext markup language, eine Textform, die Markierungen und Links ermöglicht. Eine html-

26 JAVA-Einführung, Seite 26 Seite wird stets mit dem Tag <html> eingeleitet und mit </html> beendet. Zwischen diesen Tags gibt es einen head-abschnitt, der mit <head> eingeleitet und mit </head> abgeschlossen wird, sowie einen body-abschnitt, für den Entsprechendes gilt (<body> </body>). Textabschnitte, die mit <!-- beginnen und mit --> enden, sind Kommentare. Sie beeinflussen daher das Aussehen der html-seite in keiner Weise und können gelöscht werden, nachdem Sie sie gelesen haben. Im head-abschnitt stehen Informationen für den Browser; zwischen <title> und </title> steht der Titel für die Kopfleiste des Browserfensters (bzw. die Registerkarte). Ändern Sie den Titel auf Applet1 anzeigen. Der body-abschnittt enthält den Inhalt der html-seite. <h1> steht für eine Überschrift (headline) mit vordefinierten Schriftattributen, ändern Sie den Text auf Demo-Applet. <hr> liefert eine horizontale Trennlinie, wir finden dieses Tag auch unmittelbar vor Ende des body-abschnitts. Zwischen diesen beiden Linien steht der für die Ausführung des Applets entscheidende Code, eingeleitet mit <applet> und abgeschlossen mit </applet>. Das <applet>-tag ist erweitert durch Angabe der class-datei, zu der unser Applet-Quelltext compiliert wurde, es folgen Breite und Höhe des Applet-Bereichs in der html-seite. codebase="." wird hier nicht erläutert. Die Zeile archive="file:/c:/programme/bluej/lib/bluejcore.jar,..." verweist auf Speicherorte auf dem gerade verwendeten Computer. Löschen Sie diese Zeile! Sie führt sonst leicht zu Fehlermeldungen, wenn das Applet auf einem anderen PC laufen soll! Mit alt wird ein alternativer Text angegeben, der angezeigt wird, wenn die Anzeige des Applets nicht funktioniert. Das daran anschließende >-Zeichen schließt das <applet>-tag ab. Wenn Sie noch eigenen Text in der html-seite ergänzen möchten, können Sie das gern tun das hier gezeigte Beispiel ( Sieht das nicht schön aus? ) soll aber verdeutlichen, dass hier nur ein minimaler Aspekt zum html-aufbau dargestellt wurde. Selbst einfache Umlaute müssen als Sonderzeichen speziell codiert werden, weshalb html-seiten meistens mit Hilfsprogrammen geschrieben werden. Der folgende html-quelltext liefert das abgebildete Applet-Aussehen. <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>applet1 anzeigen</title> </head> <body> <h1>demo-applet</h1> <hr> <applet code="applet1.class" width=200 height=120 codebase="." alt="applet wird (noch) nicht ausgeführt." > Ihr Browser ignoriert das <APPLET>-Tag! </applet> <hr> Sieht das nicht schön aus? </body> </html> (Vergleichen Sie auch mit dem html-text, der im Anhang angegeben ist!)

27 JAVA-Einführung, Seite 27 Speichern Sie den Text nach den vorgenommenen Änderungen. Beachten Sie, dass bei erneutem Aufruf zum Ausführen im Browser BlueJ die html-seite neu erstellt und Ihre Änderungen verloren gehen! Kopieren deshalb Sie diese Datei zusammen mit der Datei Applet1.class auf einen USB-Stick (in einen gemeinsamen Ordner) und testen Sie dieses Applet auf einem Computer, der BlueJ nicht kennt! Vielleicht haben Sie ja sogar die Möglichkeit, dieses Applet unter Linux oder einem Apple-Betriebssystem zu testen. 7. Siebentes Projekt: Das Applet reagiert auf eine Maus-Aktion In diesem Kapitel lernen Sie, wie ein Applet auf die Betätigung einer Maustaste reagieren kann. Das ist der erste Schritt in Richtung auf ein richtiges Programm, also ein Applet, das auf Aktionen des Anwenders reagiert. Unsere Maus-Demo erstellen wir in 3 Versionen, die schrittweise kompakter werden. MausDemo3 hat den kürzesten Quelltext, dieser ist aber ohne MausDemo1 und MausDemo2 kaum zu verstehen. Alle 3 Maus-Demo-Applets leisten dasselbe: Sie stellen auf der Applet- Fläche eine farbige Kreisfläche dar, die beim Klicken mit der Maus (genau genommen: beim Drücken einer Maustaste) die Farbe zwischen rot und blau wechselt. Dabei spielt es noch keine Rolle, ob die Kreisfläche oder der Bereich daneben getroffen wurde. Für die Übersicht Ihrer Ordner- Struktur ist es zweckmäßig, diese 3 Projekte in einem eigenen Ordner Mausdemo123 zu speichern. Wählen Sie also Neues Projekt, navigieren Sie zum Ordner Ihrer BlueJ-Projekte, erstellen Sie einen neuen Ordner Mausdemo123, speichern Sie in diesem das neue Projekt als Mausdemo1. Erstellen Sie zuerst die Klasse Kreis. Der Konstruktor zeigt, wie man auf die Instanzvariable x zugreift, wenn der übergebene Parameter ebenfalls x heißt: this ist ein Zeiger auf die aktuelle Instanz der Klasse Kreis. Als nächstes erstellen Sie die Klasse MausDemo1, als Art der Klasse wählen Sie Applet. Die nicht verwendeten vorgegebenen Methoden sind auf der folgenden Seite nicht abgebildet. import java.awt.*; /** Klasse Kreis: * Eine Fläche mit Farbe * Spier Feb.2010 */ public class Kreis private int r; private int x, y; private Color farbe; /** Konstruktor für Kreis x,y,r: Mitte, Radius */ public Kreis(int x, int y, int r) this.x = x; this.y = y; this.r = r; farbe = Color.red; Quelltext für die Klasse Quelltext für die Kreis Klasse Kreis /** Diese Methode zeichnet die Kreisfläche. grafikobjekt: Objekt, mit dem auf * die Appletfläche gezeichnet wird. */ public void zeichnen(graphics grafikobjekt) grafikobjekt.setcolor(farbe); grafikobjekt.filloval(x-r, y-r, 2*r, 2*r); /** Diese Methode wechselt die Farbe * rot <--> blau und zeichnet neu. */ public void farbwechsel(graphics gr) if (farbe == Color.red) farbe = Color.blue; else farbe = Color.red; zeichnen(gr); // mit neuer Farbe zeichnen

28 JAVA-Einführung, Seite 28 Wenn sich beide Klassen fehlerfrei übersetzen lassen, können Sie das Applet testen: Es muss eine rote Kreisfläche auf weißem Grund zeigen. import java.awt.*; import javax.swing.*; /** Das Applet Klasse MausDemo1 demonstriert * die Verwendung von MeinMausAdapter, einer * Erweiterung von MouseAdapter. * (Siehe separate Quelltextdatei) * Quelltext für das Applet Spier Quelltext für das Applet Feb.2010 MausDemo1 (vorläufig) MausDemo1 (vorläufig) */ public class MausDemo1 extends JApplet // das Applet verwaltet einen Kreis // MeinMausAdapter greift darauf zu, // daher nicht private! public Kreis meinkreis; Jetzt erzeugen wir im selben Projekt eine weitere neue Klasse, wir nennen sie MeinMausAdapter. Diese Klasse ist eine Erweiterung der in java.awt.event.* vordefinierten Klasse MouseAdapter. MeinMausAdapter hat die Methode mousepressed geerbt. Da diese bisher nichts tut, wird sie hier so überschrieben, dass sie den Kreis mit gewechselter Farbe neu zeichnet (siehe Fortsetzung des Quelltextes auf der nächsten Seite). import java.awt.event.*; /** Wird vom Browser oder Applet-Viewer * aufgerufen,... */ public void init() // Workaround für... JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty( "defeatsystemeventqueuecheck",true); // Kreis erzeugen: Mitte (40 40), Radius 35 meinkreis = new Kreis(40, 40, 35); // HIER WIRD NOCH DER MAUSADAPTER ERGÄNZT! // Methode zum Zeichnen des Applets public void paint(graphics g) Rectangle r = getbounds(); g.clearrect(r.x, r.y, r.width, r.height); meinkreis.zeichnen(g); /** MeinMausAdapter überschreibt die geerbte Methode mousepressed. Feb.2010 */ Quelltext für Quelltext für public class MeinMausAdapter extends MouseAdapter MeinMausAdapter (Teil 1) MeinMausAdapter (Teil 1) /** Die geerbte Methode mousepressed von MouseAdapter tut nichts. * Hier wird sie überschrieben, so dass beim Drücken einer Maustaste * etwas geschehen kann: Kreisfarbe wechseln! * e MouseEvent-Instanz, die von JAVA verwaltet wird. */ public void mousepressed(mouseevent e) // Wir brauchen einen Zeiger auf das Applet. MausDemo1 md1; // Der MouseEvent e besitzt die Methode getcomponent(), // mit der wir diesen Zeiger erhalten.

29 JAVA-Einführung, Seite 29 // Vor der Zuweisung ist eine Typumwandlung nötig: md1 = (MausDemo1) e.getcomponent(); // Graphics-Objekt holen und damit den Farbwechsel ausführen: md1.meinkreis.farbwechsel(md1.getgraphics()); Quelltext für Quelltext für MeinMausAdapter (Teil 2) MeinMausAdapter (Teil 2) In der Methode mousepressed muss auf das Applet zugegriffen werden, um auf dessen Kreis zugreifen zu können. Da die Kreis-Methode "farbwechsel" als Parameter das Graphics-Objekt des Applets benötigt, müssen wir ihr dieses übermitteln. Das Applet hat freundlicherweise die Methode getgraphics() geerbt, mit der wir dieses Graphics-Objekt erhalten. Wenn sich diese Klasse fehlerfrei übersetzen lässt, können Sie fortfahren: Der Mausadapter muss nun in das Applet eingebaut werden. Das geschieht in der init-methode von MausDemo1, direkt nach dem Erzeugen des Kreises (siehe Seite 28), durch Einfügen der Diese Ergänzung vervollständigt abgebildeten Zeilen. Diese Ergänzung den Quelltext vervollständigt für das Applet den MausDemo1. Quelltext für das Applet MausDemo1. MeinMausAdapter mausreaktion = new MeinMausAdapter(); addmouselistener(mausreaktion); Zunächst wird hier also eine Variable vom Typ MeinMausAdapter deklariert, sie wird noch in derselben Zeile initialisiert. Der Konstruktor-Aufruf (ohne Parameter) führt auf einen geerbten Konstruktor. Dann wird diese Instanz unseres Mausadapters durch die (geerbte) Methode addmouselistener in das Applet eingebunden. Wenn Sie es gern kürzer wünschen, geht es auch in einer einzigen Zeile ohne Verwendung einer Variablen: addmouselistener(new MeinMausAdapter()); Auch wenn die Zusammenhänge kompliziert erscheinen: Nur Dank der geerbten Methoden bleibt der Umfang des Quelltextes bei diesem Projekt überschaubar! Wenn Sie jetzt das Applet MausDemo1 ausführen, sollte der Kreis bei Maustasten-Betätigung die Farbe wechseln sonst müssen Sie sich auf Fehlersuche begeben! Kommen wir jetzt zu Mausdemo2. Öffnen Sie Mausdemo1, falls es nicht das aktuelle Projekt ist. Wählen Sie jetzt im BlueJ- Hauptfenster den Menüpunkt Speichern unter... und speichern Sie das vorhandene Projekt als Mausdemo2. Löschen Sie jetzt in diesem Projekt die Klasse MeinMausAdapter! Bearbeiten Sie dann den Quelltext von MausDemo1 (noch fand keine Umbenennung der Appletklasse statt) wie nachfolgend beschrieben. Vorhandene Kommentare passen Sie so weit an, wie erforderlich sie sind hier nicht mit aufgeführt. Im Übrigen besteht die Änderung hauptsächlich darin, dass die Klasse MeinMausAdapter jetzt innerhalb der Klasse MausDemo1 deklariert wird. Das ist einerseits sinnvoll, weil sie speziell nur für dieses Applet entworfen ist. Andererseits braucht sie jetzt keinen Zeiger mehr auf das Applet aus dem MouseEvent zu ermitteln, weil sie als Bestandteil des Applets auf dessen gesamte Methoden und Datenfelder problemlos zugreifen kann. Und nun geht es los: Vergessen Sie nicht, die zusätzliche import-anweisung (java.awt.event.*) zu ergänzen! Das Umbenennen der Klasse in MausDemo2 erfolgt im Quelltext (hinter dem Schlüsselwort class). Die Umbenennung kann sich aber erst auswirken, wenn sich der Quelltext fehlerfrei kompilieren lässt, also erst nach der vollständigen Anpassung dieses Quelltextes, so wie er auf der folgende Seite dargestellt ist.

30 JAVA-Einführung, Seite 30 Wenn Sie diesen Applet-Quelltext fehlerfrei übersetzen konnten, prüfen Sie, ob Sie die Klasse schon von MausDemo1 in MausDemo2 umbenannt haben, holen Sie es gegebenenfalls nach und übersetzen Sie erneut. Beachten Sie, dass hier das Datenfeld meinkreis als private deklariert werden kann! Auch meinmausadapter ist nicht öffentlich, denn nur MausDemo2 braucht darauf zuzugreifen. Die Vorteile überwiegen deutlich, üblicherweise werden deshalb Reaktionen auf Aktionen mit der Maus daher so wie hier oder so wie nachfolgend in Mausdemo3 programmiert! Speichern Sie nun das Projekt als Mausdemo3 und passen Sie den Quelltext wie abgebildet an: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class MausDemo3 extends JApplet private Kreis meinkreis; public void init() JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty( "defeatsystemeventqueuecheck", true); meinkreis = new Kreis(40, 40, 35); import java.awt.*; import javax.swing.*; import java.awt.event.*; public class MausDemo2 extends JApplet private Kreis meinkreis; addmouselistener(new MouseAdapter() public void mousepressed(mouseevent e) meinkreis.farbwechsel(getgraphics()); ); public void paint(graphics g) Rectangle r = getbounds(); g.clearrect(r.x, r.y, r.width, r.height); meinkreis.zeichnen(g); public void init() JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty( "defeatsystemeventqueuecheck", true); Quelltext für das Applet Quelltext für das Applet MausDemo2 (Kommentare MausDemo2 nicht dargestellt) (Kommentare nicht dargestellt) meinkreis = new Kreis(40, 40, 35); addmouselistener(new MeinMausAdapter()); public void paint(graphics g) Rectangle r = getbounds(); g.clearrect(r.x, r.y, r.width, r.height); meinkreis.zeichnen(g); private class MeinMausAdapter extends MouseAdapter public void mousepressed(mouseevent e) meinkreis.farbwechsel(getgraphics()); Mausdemo3 unterscheidet sich von Mausdemo2 darin, dass die Erweiterung MeinMausAdapter von MouseAdapter nicht mehr explizit aufgeführt wird. Die Erweiterung ist vielmehr anonym direkt in den Aufruf des Konstruktors integriert, indem sie sich diesem unmittelbar anschließt, und zwar eingeschlossen in geschweiften Klammern. Erst dann folgt die schließende runde Klammer von addmouselistener(). Quelltext für das Applet MausDemo3 Quelltext für das Applet MausDemo3 (Kommentare nicht dargestellt) (Kommentare nicht dargestellt)

31 JAVA-Einführung, Seite 31 Sinnvolle Verbesserungen der Mausdemo: In Hinblick auf ein Puzzle-Spiel, das wir im nächsten Kapitel programmieren, wollen wir Mausdemo2 (oder Mausdemo3) in zwei Schritten noch verbessern: Die Farbe des Kreises soll sich nur ändern, wenn er beim Anklicken getroffen wurde. Nur mit der linken Maustaste soll die Farbe gewechselt werden können, weil üblicherweise nur diese Taste Aktionen auslöst. Für den ersten Schritt ergänzen wir in der Klasse Kreis eine Methode istdrin(), die true zurück gibt, wenn die übergebenen Koordinaten einen Punkt innerhalb der Kreisfläche beschreiben, und sonst false. Die Rückgabe ist also vom Typ boolean, die ganze Methode lautet: /** * Diese Methode prüft, ob der durch (u v) beschriebene Punkt * im Innern des Kreises liegt. true, falls Punkt im Innern */ public boolean istdrin(int u, int v) // Anwendung des Satzes von Pythagoras: return ((u-x)*(u-x) + (v-y)*(v-y) <= r*r); Jetzt erweitern wir die Methode mousepressed so, dass sie prüft, ob der Kreis getroffen wurde: public void mousepressed(mouseevent e) int mausx = e.getx(); int mausy = e.gety(); if (meinkreis.istdrin(mausx, mausy)) meinkreis.farbwechsel(getgraphics()); Zur Erläuterung: Der Mausklick wird von JAVA registriert. Dabei werden Mausposition und betätigte Taste erkannt. Weil unser Applet einen MouseListener einbaut, gibt JAVA diese Daten an unser Applet (genauer an den MouseAdapter) weiter. Der MouseAdapter ruft dann je nach Aktion eine seiner Methoden (mousepressed, mouseclicked, mousereleased o.ä.) auf. Die Mausdaten werden dabei mit einer Instanz der Klasse MouseEvent übermittelt. Diese Instanz heißt hier e (für event ), ihre Methoden getx und gety liefern die Mausposition. (Die Methode mouseclicked ist hier leider weniger geeignet, denn sie wertet eine Mausaktion nur dann als Klick, wenn das Loslassen der Maustaste an genau derselben Position wie das vorherige Drücken der Maustaste geschieht. Man muss also mit ruhiger Hand klicken! Im Interesse besserer Lesbarkeit ist das Drücken der Maustaste in diesem Kapitel manchmal als Klicken bezeichnet.) Um jetzt nur auf die linke Maustaste zu reagieren, testen wir zusätzlich den Wert, den e.getbutton() liefert dazu muss nur die if-zeile von mousepressed erweitert werden: if (meinkreis.istdrin(mausx, mausy) && e.getbutton() == MouseEvent.BUTTON1) Zwei Anmerkungen: BUTTON1 ist eine Konstante, die in der Klasse MouseEvent definiert ist. Die Verknüpfung && ist ein logisches UND, sie unterscheidet sich vom einfachen & dadurch, dass die zweite Bedingung nicht mehr geprüft wird, wenn die erste Bedingung bereits false ist. Das bringt im Prinzip einen Geschwindigkeitsvorteil!

32 JAVA-Einführung, Seite Achtes Projekt: Das Puzzle mit 25 Feldern In diesem Kapitel programmieren wir ein richtiges Spiel, das vielleicht nicht nur Ihnen Freude macht, sondern auch Bekannten aus Ihrem Umfeld. Sie können es also weitergeben an Mitmenschen, die gerne Denksport betreiben oder sich für sehr schlau halten! In dem Spiel geht es darum, alle zunächst weißen Kreise durch Anklicken rot zu färben. Das Problem besteht darin, dass die Nachbarfelder bei jedem Klick ebenfalls die Farbe wechseln! Beginnen Sie ein neues Projekt und geben Sie ihm den Namen 25er-Puzzle. Da unser Puzzle die Klasse Kreis aus den Mausdemo-Projekten verwendet, wählen Sie jetzt im Menü von BlueJ den Punkt Projekt/Importieren... und importieren Sie die Mausdemo, in der die Klasse Kreis die Methode istdrin besitzt. Beim Import erhalten Sie eine Meldung über einige Dateien, die nicht importiert werden konnten klicken Sie einfach auf Weiter. Löschen Sie jetzt die importierte Applet-Klasse MausDemo2 bzw. MausDemo3. Öffnen Sie den Kreis-Quelltext. Überprüfen Sie, ob er neben dem auf Seite 27 dargestellten Text auch die Methode istdrin von Seite 31 enthält, andernfalls ergänzen Sie diese wenigen Zeilen. Klassenvariablen und Instanzvariablen Für dieses Spiel wird die Klasse Kreis noch leicht modifiziert: Den Radius r legen wir für alle Quadrate gleich fest, und zwar in einer einzigen gemeinsamen Variablen. Damit sich die Kreise nicht berühren, wird außerdem eine Randbreite rand festgelegt, die ebenfalls für alle Kreise gilt. Diese Variablen werden durch das Schlüsselwort static zu gemeinsamen Variablen sie existieren in der Klasse unabhängig davon, ob überhaupt eine Instanz (also ein Kreis) erzeugt wurde. Deshalb nennt man sie auch Klassenvariablen. Im Gegensatz dazu sind die in x und y gespeicherten Werte für den Mittelpunkt des Kreises für jeden Kreis individuell verschieden, sie werden für jede Instanz der Klasse Kreis neu angelegt und existieren nur innerhalb der Instanzen. Solche Datenfelder heißen daher auch Instanzvariablen. Da die noch zu erstellende Appletklasse auf den Radius und die Randbreite zugreifen, sind die statischen Variablen als public deklariert. (Auch Methoden können als static deklariert werden, hier ergibt sich dafür aber kein Anlass.) Der Konstruktor wird angepasst, denn ihm wird jetzt kein Radius mehr übergeben, der ist ja bereits für alle Kreise mit dem Wert 40 festgelegt. Die Farbe wird mit weiß initialisiert. import java.awt.*; /** * Klasse Kreis mit festem Radius * Spier Feb.2010 */ public class Kreis public static int r = 40; public static int rand = 3; private int x, y; private Color farbe; /** * Konstruktor für Objekte der * Klasse Kreis int x,y Mittelpunkt */ public Kreis(int x, int y) this.x = x; this.y = y; farbe = Color.white;

33 JAVA-Einführung, Seite 33 Die Methode zum Zeichnen muss den Rand berücksichtigen und wird ebenfalls angepasst: /** * Diese Methode zeichnet die Kreisfläche mit dem Radius r-rand. grafikobjekt für die Appletfläche */ public void zeichnen(graphics grafikobjekt) grafikobjekt.setcolor(farbe); grafikobjekt.filloval(x-r+rand,y-r+rand,2*(r-rand),2*(r-rand)); In der Methode farbwechsel sorgen wir dafür, dass der Wechsel zwischen weiß und rot stattfindet. Damit sich später im Spiel leicht testen lässt, ob bei allen Kreisen die Farbe rot erreicht ist, ergänzen wir noch eine Methode istrot. public boolean istrot() return farbe == Color.red; Als letztes bearbeiten wir noch die Methode istdrin: public void farbwechsel(graphics gr) if (farbe == Color.white) farbe = Color.red; else farbe = Color.white; zeichnen(gr); public boolean istdrin(int u, int v) return ((u-x)*(u-x) + (v-y)*(v-y) <= (r-rand)*(r-rand)); Die Kreisfläche hat nur noch den Radius (r-rand) und entsprechend wurde die Methode angepasst. Jetzt ist die Klasse Kreis fertig programmiert. Wir erstellen nun im Projekt 25erPuzzle die Appletklasse, der wir den Namen Puzzle geben. import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Puzzle extends JApplet // Ein Array von 25 Kreisen private Kreis[] diekreise = new Kreis[25]; private MeinMausAdapter mma; Quelltext der Klasse Puzzle, Quelltext Teil der 1 Klasse Puzzle, Teil 1 // Initialisierung des Applets public void init() // "Workaround"... JRootPane rootpane = this.getrootpane(); rootpane.putclientproperty("defeatsystemeventqueuecheck", true); // Mausadapter erzeugen: mma = new MeinMausAdapter(); Array Ein Array speichert Zeiger für eine festgelegte Anzahl von Objekten des gleichen Typs. Hier können im Array diekreise 25 Instanzen unserer Klasse Kreis verwaltet werden. diekreise[0] ist der erste von ihnen und diekreise[24] ist der letzte, die Zählung beginnt also bei 0.

34 JAVA-Einführung, Seite 34 // 25 Kreise mit gewünschter Position erzeugen: for (int i = 0; i < 25; i++) Quelltext der Klasse Puzzle, Quelltext Teil der 2 Klasse int zeile = i / 5; Puzzle, Teil 2 int spalte = i % 5; diekreise[i] = new Kreis(Kreis.r*(2*spalte+1)+Kreis.rand, Kreis.r*(2*zeile+1)+Kreis.rand); For-Schleife Eine Schleife ist eine Programmstruktur, die mehrmals durchlaufen wird. For-Schleifen werden typischerweise dann verwendet, wenn die Anzahl der Schleifendurchläufe von vornherein fest steht (beachten Sie aber auch den Hinweis zu Schleifen in Kapitel 9!). Dieser Schleifentyp besteht aus dem Schleifenkopf for (<Schleifenvariable mit Startwert>; <Wiederholungsbedingung>; <Änderungsanweisung für die Schleifenvariable>) und dem Schleifenkörper, der von geschweiften Klammern eingeschlossen ist. Das Spielfeld hat 5 Zeilen und 5 Spalten mit Kreisen. Die Schleifenvariable i läuft von 0 bis 24. Der ganzzahlige Anteil von i/5 liefert bei den ersten 5 Durchläufen (i=0, 1,... 4) den Wert 0 und damit zeile = 0. Bei den nächsten 5 Durchläufen wird zeile = 1, dann 2 (usw.) und schließlich 4 (für 20/5 bis 24/5). Der Operator % ist die Rechenanweisung für den Divisionsrest, die Ergebnisse für die Spalte sind bei den Schleifendurchläufen also 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1,... Beim 8. Schleifendurchlauf ist z.b. i=7, zeile = 1, spalte = 2. Der Kreis, der bei diesem Schleifendurchlauf erzeugt werden soll, ist in der Abbildung mit einem Kreuz gekennzeichnet (Zeilen- und Spaltenzählung beginnen bei 0). Der Mittelpunkt hat die x-koordinate 5 Radius. Damit auch das Spielfeld einen Rand besitzt, wird noch die Randbreite addiert. Die y-koordinate ergibt sich entsprechend zu 3 Radius + Randbreite. Die so berechneten Mittelpunktskoordinaten werden bei jedem Schleifendurchlauf an den Konstruktor für den Kreis übergeben, und der erzeugte Kreis wird der i-ten Position im Array (diekreise[i]) zugewiesen. Wie im Kopf angegeben wird i am Ende jedes Durchlaufs um 1 erhöht (i++ ist gleichbedeutend mit i = i + 1). Damit ist die init-methode abgeschlossen. Start und Stop Der Mausadapter mma wurde in der init-methode erzeugt. Wenn er in der start()-methode des Applets hinzugefügt und in der stop()-methode wieder entfernt wird, funktionieren auch die Menüpunkte Neu starten, Starten, Abbrechen des Appletviewers. Probieren Sie es aus, wenn das Applet fertig programmiert ist! Auch wenn im Browser ein entsprechendes Menü nicht angezeigt werden kann, erscheint es sinnvoll, grundsätzlich wie folgt zu verfahren: public void start() addmouselistener(mma); public void stop() removemouselistener(mma); Quelltext der Klasse Puzzle, Quelltext Teil der 3 Klasse Puzzle, Teil 3

35 JAVA-Einführung, Seite 35 Die anschließend von BlueJ vorgeschlagene destroy()-methode bleibt leer, sie kann gelöscht werden. Kommen wir also zur paint-methode: Zunächst wird die Größe der Appletfläche ermittelt und in der lokalen Variablen r gespeichert, diese Fläche wird als Hintergrund mit einem leicht bläulich getöntem Grau gefärbt. Dann folgt eine for-schleife: Der Schleifenkopf ist identisch mit dem aus der init-methode. Im Schleifenkörper wird für jeden im Array gespeicherten Kreis dessen Methode zum Zeichnen aufgerufen. public void paint(graphics g) Rectangle r = getbounds(); g.setcolor(new Color(200,200,220)); g.fillrect(r.x, r.y, r.width, r.height); for (int i = 0; i < 25; i++) diekreise[i].zeichnen(g); meldung(); Quelltext der Klasse Puzzle, Quelltext Teil der 4 Klasse Puzzle, Teil 4 Die abschließend aufgerufene Methode meldung() gibt einen Text aus und wird im folgenden Absatz beschrieben: private void meldung() boolean geloest = true; int a = 10*Kreis.r+2*Kreis.rand; // Spielfeld-Kantenlänge // while-schleife: Anfang int i = 0; while (geloest && i<25) gelöst = diekreise[i].istrot(); Quelltext der Klasse i++; // while-schleife: Ende Puzzle, Quelltext Teil der 5 Klasse Puzzle, Teil 5 Graphics gr = getgraphics(); if (gelöst) gr.setcolor(new Color(230,255,200)); gr.fillrect(0, a, a, 22); gr.setcolor(color.black); gr.drawstring("puzzle gelöst, Glückwunsch!", 5, a+17); else gr.setcolor(color.blue); gr.fillrect(0, a, a, 22); gr.setcolor(color.white); gr.drawstring("klicken Sie, bis alle Kreise rot sind!",5,a+17); Die lokale Variable gelöst wird zunächst auf true gesetzt, dann wird in einer while-schleife geprüft, ob vielleicht doch noch ein Kreis weiß ist. Abhängig vom Ergebnis wird unterhalb des Spielfeldes eine Rechteckfläche gefärbt und einer der beiden Texte ausgegeben. While-Schleife Hier muss die Schleife nicht 25 mal durchlaufen werden, denn sobald ein weißer Kreis gefunden ist, steht fest, dass das Puzzle noch nicht gelöst ist. Die Schleife wird solange (=while) durchlaufen, wie gelöst wahr ist, und außerdem i<25 gilt. Nur wenn i=25 erreicht wird, ist das Puzzle gelöst. Dieser Schleifentyp besteht aus dem Schleifenkopf while (<Wiederholungsbedingung>) und dem Schleifenkörper, der von geschweiften Klammern eingeschlossen ist. Der Schleifenkörper wird

36 JAVA-Einführung, Seite 36 solange immer wieder durchlaufen, bis die Wiederholungsbedingung nicht mehr erfüllt ist. Die in der Schleife verwendeten Variablen müssen vor Schleifenbeginn deklariert und initialisiert sein (i = 0), die Erhöhung des laufenden i erfolgt innerhalb des Schleifenkörpers (i++). Letzteres wird leicht vergessen dann hat man meistens eine Totschleife programmiert, die nie verlassen wird, das Applet hängt sich auf und muss gewaltsam beendet werden! In Kapitel 9 können Sie nachlesen, wie while-schleifen oft durch for-schleifen ersetzt werden können! Es folgt der letzte Teil des Applet-Quelltextes, der sich durch die Kommentare selbst erklärt: // Meine MausAdapter-Klasse mit mousepressed-methode: private class MeinMausAdapter extends MouseAdapter public void mousepressed(mouseevent e) int x = e.getx(); // Mausposition holen int y = e.gety(); // Zeile und Spalte ermitteln: int spalte = (x-kreis.rand) / (2*Kreis.r); int zeile = (y-kreis.rand) / (2*Kreis.r); // Index des Keises, der getroffen sein könnte: int nr = 5*zeile + spalte; // Wenn getroffen, dann Farbe wechseln: if (diekreise[nr].istdrin(x,y) && e.getbutton() == MouseEvent.BUTTON1) Graphics gra = getgraphics(); diekreise[nr].farbwechsel(gra); // Nachbarfeld-Farbwechsel, soweit nötig: if (spalte > 0) diekreise[nr-1].farbwechsel(gra); if (spalte < 4) diekreise[nr+1].farbwechsel(gra); if (zeile > 0) diekreise[nr-5].farbwechsel(gra); if (zeile < 4) diekreise[nr+5].farbwechsel(gra); meldung(); // abschließende Klammer der Klasse Puzzle Quelltext der Klasse Puzzle, Quelltext Teil der 6 Klasse Puzzle, Teil 6 Die Zeile und die Spalte des eventuell getroffenen Kreises ergeben sich durch Division von (Mauskoordinate Rand) durch Kreisdurchmesser. Nachkommastellen werden bei der Zuweisung an eine Ganzzahl-Variable abgeschnitten. Aus Zeile und Spalte lässt sich leicht der Index des in Frage kommenden Kreises berechnen. Die Methode mousepressed ruft am Schluss meldung() auf, damit nach jedem Klick die Prüfung erfolgt, ob das Puzzle gelöst ist. Rufen Sie das Applet mit einer Höhe von 434 und einer Breite von 406 (=5*Durchmesser+2*Rand) auf! Versuchen Sie Ihr Glück, nutzen Sie die Möglichkeit des Neustarts mit dem Menü des Appletviewers! Viel Spaß beim Spielen! Zum Weitergeben lassen Sie BlueJ die html-seite erzeugen und bearbeiten Sie die Datei Puzzle.html mit dem Windows-Editor so, wie auf Seite 26 beschrieben. Der Anwender muss diese Datei und die Dateien Puzzle.class, Kreis.class, Puzzle$MeinMausAdapter.class im selben Ordner speichern, um das Spiel im Browser ausführen zu können.

37 JAVA-Einführung, Seite Was haben wir jetzt gelernt? (Wdh. und kleine Ergänzungen) Sie haben in den vorangegangenen Kapiteln Grundlagen der Programmiersprache JAVA kennen gelernt. Hier können Sie zur Wiederholung nachlesen, wie ein JAVA-Quelltext aufgebaut ist: Klassen: Jeder Quelltext definiert eine Klasse und hat folgende Form: <Import-Anweisungen soweit erforderlich> public class <Klassenname> [optional: extends <Vorgängerklasse>] Instanzen der Klasse werden mit new <Klassenname>([Parameter]) erzeugt, siehe auch Konstruktor. Es ist üblich, Klassennamen mit einem Großbuchstaben zu beginnen. Variablen werden in der Form <Bereitstellung von Variablen (Instanzvariablen / Klassenvariablen> <Methoden (auch der Konstruktor ist eine Methode)> [optional: weitere Klassendefinition, z.b. MausAdapter] <Zugriffsberechtigung><Typ> <Name> [optional: Wertzuweisung]; definiert, also indem zuerst der Typ und dann der Variablenname festgelegt werden, z.b. int a; oder String s = "Informatik"; oder double c = -3.08; Für die Zugriffsberechtigung verwenden wir meistens private oder public, sie kann auch als protected festgelegt werden, sie darf auch fehlen. Wenn der Typ eine Klasse ist, stellt die Variable genaugenommen einen Zeiger (eine Referenz) auf eine Instanz dieser Klasse dar. Es ist üblich, Variablennamen mit einem Kleinbuchstaben zu beginnen. Methoden werden in folgender Form definiert: <Zugriffsberechtigung> <Rückgabetyp> <Name>(<Parameterliste>) <Methodenquelltext, bei Bedarf mit Bereitstellung von lokale Variablen> [ggf. return-anweisung] Der Rückgabetyp gibt an, was die Methode liefert (einen String? Eine Gleitkommazahl?), sofern sie denn einen Wert zurück gibt. Bei Methoden ohne Rückgabewert muss hier void angegeben werden. Bei Methoden mit Rückgabewert muss der Methodenquelltext stets auf eine return-anweisung führen. Die Parameterliste legt fest, welche Arten von Daten an die Methode übergeben werden sollen. Dabei wird immer erst der Typ, dann ein Variablenname genannt. Mehrere Parameter werden durch Komma getrennt. Beim Methodenaufruf werden Werte (oder Zeiger) an die Methode übergeben, die Methode verwendet gemäß Parameterliste lokale Variablen, um mit diesen Werten zu arbeiten. Die Parameterliste darf auch leer sein, die Klammern müssen dann trotzdem stehen. Ein Beispiel: Die Lösung von Aufgabe 17 auf Seite 20 (ganz ähnlich ist die Lösung von Aufgabe 24). public void setname(string v, String n) vorname = v; // Datenfeld vorname erhält Wert der lokalen Variablen v, nachname = n; // nachname erhält entsprechend Wert von n.

38 JAVA-Einführung, Seite 38 Es ist üblich, Methodennamen mit einem Kleinbuchstaben zu beginnen. Ein Beispiel für die Verwendung von lokalen Variablen, die erst innerhalb der Methode definiert werden, zeigt die Klasse Bank in ihrer Methode überweisen. Der für die lokalen Variablen reservierte Speicherplatz wird mit Abschluss der Methode frei gegeben, diese Variablen existieren dann nicht mehr. Es können mehrere Methoden mit demselben Namen definiert werden, wenn sie sich in den Parameterlisten unterscheiden (Vergl. Konstruktoren). Konstruktoren sind spezielle Methoden, deren Syntax geringfügig von der zuvor beschriebenen abweicht. Sie werden in der Form <Zugriffsberechtigung> <Klassenname>(Parameterliste) <Konstruktorquelltext> // Initialisierung definiert. Die Zugriffsberechtigung ist meistens public. Da der Methodenname hier mit dem Klassennamen übereinstimmt, wird für die Rückgabe kein Typ genannt, es gibt auch keine return- Anweisung: Der Aufruf erfolgt mit dem Schlüsselwort new und damit wird eine Instanz dieser Klasse (genau genommen: ein Zeiger darauf) zurückgegeben. Eine Klasse kann mehrere Konstruktoren besitzen. Wird kein Konstruktor programmiert, so kann der geerbte Konstruktor mit leerer Parameterliste zum Erzeugen von Instanzen verwendet werden. Zugriff auf Daten / Methoden anderer Objekte: Für den Zugriff auf Methoden oder Variablen, die nicht Teil der aktuellen Instanz sind, wird der Bezeichner des Objekts (z.b. eines Bankkontos, eines Kreises, einer Graphics-Instanz) vorangestellt und ein Punkt als Trennzeichen gesetzt. Beispiel: diekreise[i].zeichnen(g); Programmstrukturen Fallunterscheidungen werden mit if bzw. mit if... else programmiert, die Form ist: if (<Bedingung>) <Quelltext für Wenn-Fall> else...<quelltext für Sonst-Fall> Der else-teil ist optional, das heißt, er darf fehlen. Wenn der Quelltext eines dieser Fälle nur aus einer einzigen Anweisung besteht, dürfen dessen geschweiften Klammern fehlen. Eine ergänzende Anmerkung: Da die return-anweisung eine Methode sofort beendet, darf bei der Altersberechnung der Klasse Person das else fehlen: if (hatteschongeburtstag) return heute.get(calendar.year) geburtsdatum.get(calendar.year); //Schluss! return heute.get(calendar.year) - geburtsdatum.get(calendar.year) - 1; Das erste return wird erreicht, wenn hatteschongeburtstag wahr ist, sonst das zweite. Bilden Sie sich selbst ein Urteil über die Verständlichkeit eines solchen Quelltextes. Für Fallunterscheidungen mit mehr als zwei Fällen kann die switch-anweisung hilfreich sein, auf die aber in diesem Text nicht eingegangen wird.

39 JAVA-Einführung, Seite 39 Schleifen Syntax der for-schleife: for (<Schleifenvariable mit Startwert>; <Wiederholungsbedingung>; <Änderungsanweisung für die Schleifenvariable>) <zu wiederholende Anweisungen> Die Schleifenvariable kann innerhalb der runden Klammer deklariert werden, dann ist sie nur innerhalb der Schleife gültig. Sie kann aber auch schon vorher definiert sein, dann kann ihr (veränderter) Wert nach Verlassen der Schleife weiter verwendet werden. Syntax der while-schleife: while (<Wiederholungsbedingung>) <zu wiederholende Anweisungen> Bei diesem Schleifentyp müssen die zu wiederholenden Anweisungen dafür sorgen, dass die Wiederholungsbedingung nicht dauerhaft erfüllt bleibt! While-Schleifen können oft durch for-schleifen ersetzt werden, weil die Wiederholungsbedingung auch unabhängig von der Schleifenvariablen formuliert werden kann, sie kann auch eine Kombination mehrerer Bedingungen sein. Beispiel: Die while-schleife in der Methode meldung() aus dem Quelltext der Klasse Puzzle (S. 35) kann elegant durch folgende for-schleife ersetzt werden: for (int i = 0; geloest && i<25; i++) // Abbruch, wenn Kreis nicht rot ist! geloest = diekreise[i].istrot(); 10. Schlussbemerkung BlueJ ist für die hier vorgestellten Projekte eine gut geeignete Entwicklungsumgebung, insbesondere durch die Möglichkeit, Instanzen zu inspizieren und ihre Methoden ohne Programmierung eines Menüs aufrufen zu können. Auch der Zugriff einer Instanz auf eine andere Instanz (Projekt Bank ) lässt sich gut demonstrieren. Für den Einstieg in JAVA ist BlueJ daher eine gute Wahl. Andere Entwicklungsumgebungen haben andere Vorteile, sie bieten z.b. Unterstützung bei der Layout-Gestaltung eines Applets, sie erlauben den bequemen Einbau eines Menüs oder von Schaltflächen für Programmaktionen. Beispiele sind die Programme Java-Editor und NetBeans, die wie BlueJ ebenfalls kostenlos aus dem Internet heruntergeladen werden können. Beide Programme bieten auch eine Code-Vervollständigung an: Wenn man in diesen Entwicklungsumgebungen bei unserem Puzzle-Quelltext (Kapitel 8) den Klassenbezeichner Kreis. eintippt, wird sofort die Auswahl der möglichen Methoden oder Variablen angezeigt, die in dieser Klasse verfügbar (also public) sind. Dieser Vorteil zeigt sich auch z.b. bei der Verwendung eines Graphics- Objektes: Sobald man den Bezeichner und den anschließenden Punkt getippt hat, kann man schon sehen, welche Methoden dieses Objekt besitzt (drawrect, fillrect, drawtext usw.) außerdem werden die benötigten Parameter angezeigt. Dadurch kann man sich oft das Nachlesen in der Dokumentation zu den verwendeten Klassen ersparen. Das Programm Java-Editor beansprucht deutlich weniger Ressourcen als NetBeans und ist zum Erstellen kleiner Programme gut geeignet. Automatisch erstellter Quelltext kann jedoch so verändert werden, dass es zu Unstimmigkeiten zwischen Layout-Entwurf und Aussehen des Programm-Fensters kommen kann. NetBeans hat dagegen ein so umfangreiches Menü, dass Anfänger es schon beim Erstellen und Speichern ihres ersten Projekts schwer haben; diese Entwicklungsumgebung ist sehr professionell und eignet sich gut für komplexe Anwendungen. Je anspruchsvoller Programme werden, umso mehr zeigen sich die Vorteile der hier genannten Entwicklungsumgebungen.

40 JAVA-Einführung, Seite 40 Deshalb wird diese Einführung in die JAVA-Programmierung mit BlueJ hier beendet. (Es folgt nur noch ein kleiner Anhang.) Anhang JAVA-Programm ohne Entwicklungsumgebung erstellen Auch ohne Entwicklungsumgebung ist es möglich, ein JAVA-Programm zu schreiben. Jeder Editor ist dafür geeignet wichtig ist nur, dass der Quelltext als reiner Text gespeichert ist. Der einfachste Editor ist der Windows-Editor, der ohnehin nur im Textformat speichern kann, da er keine Texthervorhebungen und Absatzformate zulässt. Starten Sie den Editor und schreiben Sie den folgenden Text: import javax.swing.*; import java.awt.*; public class HalloWelt extends JApplet public void paint(graphics g) g.setcolor(new Color(190,230,255)); // Farbe aus RGB erzeugen g.fillrect(0,0,150,30); // Rechteckfäche färben g.setcolor(color.blue); // blau g.drawstring("hallo Welt!",50,25); // Text ausgeben

41 JAVA-Einführung, Seite 41 Speichern Sie diesen Text unter dem Namen "HalloWelt.java" dazu müssen Sie die Anführungszeichen mit eingeben, damit der Editor nicht HalloWelt.java.txt daraus macht. Jetzt muss dieser Text compiliert werden. Dazu öffnen Sie ein Fenster mit der DOS- Eingabeaufforderung (Start-Programme-Zubehör-Eingabeaufforderung). Mit diesem Kommandozeilenfenster muss der Java-Compiler aufgerufen werden, wobei zugleich als Parameter die zu compilierende Datei angegeben sein muss. Der Compiler heißt javac.exe und befindet sich im bin- Ordner des Java-Development-Kits, so dass der Befehl wie abgebildet lauten könnte: Bei Quelltext-Fehlern erhalten Sie Hinweise, andernfalls wird die Datei HalloWelt.class erzeugt. Diese ist nicht direkt ausführbar, kann aber als Applet in einer Html-Seite ausgeführt werden. Um diese Html-Seite zu erstellen, kann wieder der Windows-Editor verwendet werden. Schreiben Sie eine Datei mit folgendem Text: <html> <head> <TITLE>Hello World mit JAVA</TITLE> </head> <body> Hier folgt der Output des Programms:<br> <APPLET CODE="HalloWelt.class" width=150 height=30> </APPLET> </body> </html> Speichern Sie diese Datei als "Hallo.html" (Anführungszeichen beachten, s.o.). Die class-datei und die html-datei müssen sich im selben Verzeichnis befinden. Anschließend öffnen Sie die html-datei durch Doppelklick. Das Java-Development-Kit bietet auch die Möglichkeit, das Applet ohne Browser anzusehen. Dazu muss der Appletviewer aufgerufen werden, als Parameter wird die Html-Seite übergeben (in der die Applet-Maße vermerkt sind): Erst, wenn Sie das Applet beenden, können Sie im Kommandozeilenfenster weitere Anweisungen eingeben (z.b. exit). Der Aufruf des Appletviewers ist in BlueJ zum Anzeigen von Applets integriert. Listen, die nur Instanzen einer einzigen Klasse verwalten Im Projekt Bank_2 lernten Sie die Klasse ArrayList kennen, die untypisierte Zeiger speichert. Die Methode get(...) dieser Klasse lieferte keine Konto-Instanzen, deshalb musste eine Typumwandlung erfolgen, um aus dem Zeiger einen Kontozeiger (ein Konto) zu machen (siehe Seite 13). Der BlueJ- Compiler lieferte eine Warnmeldung (die man unter 'Einstellungen' abschalten kann). Diese Warnmeldung entfällt, wenn wir eine Liste verwenden, die nur Konto-Instanzen enthalten

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Peter Koos 03. Dezember 2015 0 Inhaltsverzeichnis 1 Voraussetzung... 3 2 Hintergrundinformationen... 3 2.1 Installationsarten...

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen Um die maximale Sicherheit für das Betriebssystem und Ihre persönlichen Daten zu gewährleisten, können Sie Programme von Drittherstellern

Mehr

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me Bevor Sie die Platte zum ersten Mal benutzen können, muss sie noch partitioniert und formatiert werden! Vorher zeigt sich die Festplatte

Mehr

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und

Mehr

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Um mit IOS2000/DIALOG arbeiten zu können, benötigen Sie einen Webbrowser. Zurzeit unterstützen wir ausschließlich

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:

Mehr

GameGrid mit BlueJ Seite 1

GameGrid mit BlueJ Seite 1 GameGrid mit BlueJ Seite 1 GameGrid mit BlueJ BlueJ ist eine Java-Entwicklungsumgebung mit einer einfachen Benutzeroberfläche. Dem Benutzer stehen ein einfacher Texteditor mit Syntaxhervorhebung und ein

Mehr

1 Konto für HBCI/FinTS mit Chipkarte einrichten

1 Konto für HBCI/FinTS mit Chipkarte einrichten 1 Konto für HBCI/FinTS mit Chipkarte einrichten Um das Verfahren HBCI/FinTS mit Chipkarte einzusetzen, benötigen Sie einen Chipkartenleser und eine Chipkarte. Die Chipkarte erhalten Sie von Ihrem Kreditinstitut.

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Die nachfolgende Anleitung zeigt die Vorgehensweise unter Microsoft Windows Vista.

Die nachfolgende Anleitung zeigt die Vorgehensweise unter Microsoft Windows Vista. Schritt für Schritt Anleitung zur Einrichtung Ihrer neuen Festplatte Die nachfolgende Anleitung zeigt die Vorgehensweise unter Microsoft Windows Vista. Schließen Sie Ihre Festplatte an Ihrem Computer an.

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt Inhaltsverzeichnis Aufgabe... 1 Allgemein... 1 Active Directory... 1 Konfiguration... 2 Benutzer erstellen... 3 Eigenes Verzeichnis erstellen... 3 Benutzerkonto erstellen... 3 Profil einrichten... 5 Berechtigungen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Kommunikations-Management

Kommunikations-Management Tutorial: Wie importiere und exportiere ich Daten zwischen myfactory und Outlook? Im vorliegenden Tutorial lernen Sie, wie Sie in myfactory Daten aus Outlook importieren Daten aus myfactory nach Outlook

Mehr

Excel Pivot-Tabellen 2010 effektiv

Excel Pivot-Tabellen 2010 effektiv 7.2 Berechnete Felder Falls in der Datenquelle die Zahlen nicht in der Form vorliegen wie Sie diese benötigen, können Sie die gewünschten Ergebnisse mit Formeln berechnen. Dazu erzeugen Sie ein berechnetes

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Serienbrief aus Outlook heraus Schritt 1 Zuerst sollten Sie die Kontakte einblenden, damit Ihnen der Seriendruck zur Verfügung steht. Schritt 2 Danach wählen Sie bitte Gerhard Grünholz 1 Schritt 3 Es öffnet

Mehr

Anleitung für den Euroweb-Newsletter

Anleitung für den Euroweb-Newsletter 1. Die Anmeldung Begeben Sie sich auf der Euroweb Homepage (www.euroweb.de) in den Support-Bereich und wählen dort den Punkt Newsletter aus. Im Folgenden öffnet sich in dem Browserfenster die Seite, auf

Mehr

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen Menü Macro WinIBW2-Macros unter Windows7?... 1 Macros aufnehmen... 1 Menübefehle und Schaltflächen in Macros verwenden... 4 Macros bearbeiten... 4 Macros löschen... 5 Macro-Dateien... 5 Macros importieren...

Mehr

SEPA-Anleitung zum Release 3.09

SEPA-Anleitung zum Release 3.09 Hier folgt nun eine kurze Information was sich mit dem neuen Release 3.08 zum Thema SEPA alles ändert. Bitte diese Anleitung sorgfältig lesen, damit bei der Umsetzung keine Fragen aufkommen. Bitte vor

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Handbuch ECDL 2003 Professional Modul 2: Tabellenkalkulation Vorlagen benutzen und ändern

Handbuch ECDL 2003 Professional Modul 2: Tabellenkalkulation Vorlagen benutzen und ändern Handbuch ECDL 2003 Professional Modul 2: Tabellenkalkulation Vorlagen benutzen und ändern Dateiname: ecdl_p2_02_03_documentation.doc Speicherdatum: 08.12.2004 ECDL 2003 Professional Modul 2 Tabellenkalkulation

Mehr

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Ab der Version forma 5.5 handelt es sich bei den Orientierungshilfen der Architekten-/Objektplanerverträge nicht

Mehr

Microsoft Access 2013 Navigationsformular (Musterlösung)

Microsoft Access 2013 Navigationsformular (Musterlösung) Hochschulrechenzentrum Justus-Liebig-Universität Gießen Microsoft Access 2013 Navigationsformular (Musterlösung) Musterlösung zum Navigationsformular (Access 2013) Seite 1 von 5 Inhaltsverzeichnis Vorbemerkung...

Mehr

Anleitung für Berichte in Word Press, auf der neuen Homepage des DAV Koblenz

Anleitung für Berichte in Word Press, auf der neuen Homepage des DAV Koblenz Anleitung für Berichte in Word Press, auf der neuen Homepage des DAV Koblenz Diese Anleitung soll als Kurzreferenz und Schnellanleitung dienen um einfach und schnell Berichte auf der Homepage www.dav-koblenz.de

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

Mehr

Empfehlungen zur Nutzung der CD zum Buch: Klee & Wiemann: Beweglichkeit und Dehnfähigkeit. Schorndorf: Hofmann, 2005. 1

Empfehlungen zur Nutzung der CD zum Buch: Klee & Wiemann: Beweglichkeit und Dehnfähigkeit. Schorndorf: Hofmann, 2005. 1 Empfehlungen zur Nutzung der CD zum Buch: Klee & Wiemann: Beweglichkeit und Dehnfähigkeit. Schorndorf: Hofmann, 2005. 1 Starten der CD Nach dem Einlegen der CD in Ihr CD-Laufwerk müsste die CD von selbst

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den

Mehr

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können. Tutorial: Wie erfasse ich einen Termin? In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können. Neben den allgemeinen Angaben zu einem

Mehr

Speichern. Speichern unter

Speichern. Speichern unter Speichern Speichern unter Speichern Auf einem PC wird ständig gespeichert. Von der Festplatte in den Arbeitspeicher und zurück Beim Download Beim Kopieren Beim Aufruf eines Programms Beim Löschen Beim

Mehr

Diese Anleitung beschreibt das Vorgehen mit dem Browser Internet Explorer. Das Herunterladen des Programms funktioniert in anderen Browsern ähnlich.

Diese Anleitung beschreibt das Vorgehen mit dem Browser Internet Explorer. Das Herunterladen des Programms funktioniert in anderen Browsern ähnlich. Die Lernsoftware Revoca Das Sekundarschulzentrum Weitsicht verfügt über eine Lizenz bei der Lernsoftware «Revoca». Damit können die Schülerinnen und Schüler auch zu Hause mit den Inhalten von Revoca arbeiten.

Mehr

YouTube: Video-Untertitel übersetzen

YouTube: Video-Untertitel übersetzen Der Easytrans24.com-Ratgeber YouTube: Video-Untertitel übersetzen Wie Sie mit Hilfe von Easytrans24.com in wenigen Schritten Untertitel für Ihre YouTube- Videos in mehrere Sprachen übersetzen lassen können.

Mehr

Installationsanleitung CLX.PayMaker Home

Installationsanleitung CLX.PayMaker Home Installationsanleitung CLX.PayMaker Home Inhaltsverzeichnis 1. Installation und Datenübernahme... 2 2. Erste Schritte Verbindung zur Bank einrichten und Kontoinformationen beziehen... 4 3. Einrichtung

Mehr

TELIS FINANZ Login App

TELIS FINANZ Login App Installation & Bedienung der TELIS FINANZ Login App 1. Voraussetzungen - Android Version 4.0 oder höher - Uhrzeit automatisch gestellt - Für die Einrichtung wird einmalig eine Internetverbindung benötigt

Mehr

EINFACHES HAUSHALT- KASSABUCH

EINFACHES HAUSHALT- KASSABUCH EINFACHES HAUSHALT- KASSABUCH Arbeiten mit Excel Wir erstellen ein einfaches Kassabuch zur Führung einer Haushalts- oder Portokasse Roland Liebing, im November 2012 Eine einfache Haushalt-Buchhaltung (Kassabuch)

Mehr

Vorgehensweise für die Umstellung von Quicken-Konten bei Bargeldbuchungen auf ein Wertpapierkonto

Vorgehensweise für die Umstellung von Quicken-Konten bei Bargeldbuchungen auf ein Wertpapierkonto Vorgehensweise für die Umstellung von Quicken-Konten bei Bargeldbuchungen auf ein Wertpapierkonto Bevor Sie Ihre Datei nach Quicken 2010, bzw. 2011 konvertieren, können Sie in Ihrer jetzt benutzten Version

Mehr

Kleines Handbuch zur Fotogalerie der Pixel AG

Kleines Handbuch zur Fotogalerie der Pixel AG 1 1. Anmelden an der Galerie Um mit der Galerie arbeiten zu können muss man sich zuerst anmelden. Aufrufen der Galerie entweder über die Homepage (www.pixel-ag-bottwartal.de) oder über den direkten Link

Mehr

Installationsanleitung CLX.PayMaker Office

Installationsanleitung CLX.PayMaker Office Installationsanleitung CLX.PayMaker Office Inhaltsverzeichnis 1. Installation und Datenübernahme... 2 2. Erste Schritte Verbindung zur Bank einrichten und Kontoinformationen beziehen... 4 3. Einrichtung

Mehr

Gruppenrichtlinien und Softwareverteilung

Gruppenrichtlinien und Softwareverteilung Gruppenrichtlinien und Softwareverteilung Ergänzungen zur Musterlösung Bitte lesen Sie zuerst die gesamte Anleitung durch! Vorbemerkung: Die Begriffe OU (Organizational Unit) und Raum werden in der folgenden

Mehr

Schulberichtssystem. Inhaltsverzeichnis

Schulberichtssystem. Inhaltsverzeichnis Schulberichtssystem Inhaltsverzeichnis 1. Erfassen der Schüler im SBS...2 2. Erzeugen der Export-Datei im SBS...3 3. Die SBS-Datei ins FuxMedia-Programm einlesen...4 4. Daten von FuxMedia ins SBS übertragen...6

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

Artikel Schnittstelle über CSV

Artikel Schnittstelle über CSV Artikel Schnittstelle über CSV Sie können Artikeldaten aus Ihrem EDV System in das NCFOX importieren, dies geschieht durch eine CSV Schnittstelle. Dies hat mehrere Vorteile: Zeitersparnis, die Karteikarte

Mehr

Leitfaden zur Installation von Bitbyters.WinShutdown

Leitfaden zur Installation von Bitbyters.WinShutdown Leitfaden zur Installation von Bitbyters.WinShutdown für Windows 32 Bit 98/NT/2000/XP/2003/2008 Der BitByters.WinShutDown ist ein Tool mit dem Sie Programme beim Herunterfahren Ihres Systems ausführen

Mehr

Diese Anleitung wurde erstellt von Niclas Lüchau und Daniel Scherer. Erste Anmeldung. Schritt 1: Anmeldung..2. Schritt 2: Passwort setzen 3

Diese Anleitung wurde erstellt von Niclas Lüchau und Daniel Scherer. Erste Anmeldung. Schritt 1: Anmeldung..2. Schritt 2: Passwort setzen 3 Diese Anleitung wurde erstellt von Niclas Lüchau und Daniel Scherer Inhalt Erste Anmeldung. Schritt 1: Anmeldung..2 Schritt 2: Passwort setzen 3 Schritt 3: Nachträgliches Ändern des Passworts..4 Schreiben

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Arbeiten mit dem Outlook Add-In

Arbeiten mit dem Outlook Add-In Arbeiten mit dem Outlook Add-In Das Outlook Add-In ermöglicht Ihnen das Speichern von Emails im Aktenlebenslauf einer Akte. Außerdem können Sie Namen direkt aus BS in Ihre Outlook-Kontakte übernehmen sowie

Mehr

Comic Life 2.x. Fortbildung zum Mediencurriculum

Comic Life 2.x. Fortbildung zum Mediencurriculum Comic Life 2.x Fortbildung zum Mediencurriculum - 1 - Comic Life Eine kurze Einführung in die Bedienung von Comic Life 2.x. - 2 - Starten von Comic Life Bitte starte das Programm Comic Life. Es befindet

Mehr

VR-NetWorld Software Einrichtung einer Bankverbindung PIN/TAN-Verfahren

VR-NetWorld Software Einrichtung einer Bankverbindung PIN/TAN-Verfahren VR-NetWorld Software Einrichtung einer Bankverbindung PIN/TAN-Verfahren Sehr geehrte Kundin, sehr geehrter Kunde, bitte benutzen Sie zur Einrichtung einer Bankverbindung mit dem PIN/TAN-Verfahren die in

Mehr

Wie halte ich Ordnung auf meiner Festplatte?

Wie halte ich Ordnung auf meiner Festplatte? Wie halte ich Ordnung auf meiner Festplatte? Was hältst du von folgender Ordnung? Du hast zu Hause einen Schrank. Alles was dir im Wege ist, Zeitungen, Briefe, schmutzige Wäsche, Essensreste, Küchenabfälle,

Mehr

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern 1 Einleitung Lernziele Symbolleiste für den Schnellzugriff anpassen Notizenseiten drucken eine Präsentation abwärtskompatibel speichern eine Präsentation auf CD oder USB-Stick speichern Lerndauer 4 Minuten

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Informatik I Tutorial

Informatik I Tutorial ETH Zürich, D-INFK/D-BAUG Herbstsemester 2015 Dr. Martin Hirt Daniel Jost Informatik I Tutorial Dieses Tutorial hat zum Ziel, die notwendigen Tools auf dem eigenen Computer zu installieren, so dass ihr

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung Nach dem Update auf die Version 1.70 bekommen Sie eine Fehlermeldung,

Mehr

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM Hinweise: - Dies ist eine schrittweise Anleitung um auf den Server der Ag-Kim zuzugreifen. Hierbei können Dateien ähnlich wie bei Dropbox hoch-

Mehr

Die Dateiablage Der Weg zur Dateiablage

Die Dateiablage Der Weg zur Dateiablage Die Dateiablage In Ihrem Privatbereich haben Sie die Möglichkeit, Dateien verschiedener Formate abzulegen, zu sortieren, zu archivieren und in andere Dateiablagen der Plattform zu kopieren. In den Gruppen

Mehr

Mediumwechsel - VR-NetWorld Software

Mediumwechsel - VR-NetWorld Software Mediumwechsel - VR-NetWorld Software Die personalisierte VR-NetWorld-Card wird mit einem festen Laufzeitende ausgeliefert. Am Ende der Laufzeit müssen Sie die bestehende VR-NetWorld-Card gegen eine neue

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Einrichten eines MAPI- Kontos in MS Outlook 2003

Einrichten eines MAPI- Kontos in MS Outlook 2003 Einrichten eines MAPI- Kontos in MS Outlook 2003 Um mit dem E-Mail-Client von Outlook Ihr E-Mail Konto der Uni Bonn mit MAPI einzurichten, müssen Sie sich als erstes an den Postmaster wenden, um als MAPI-Berechtigter

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über

Mehr

Anmeldung bei einem registrierten Konto (Account)

Anmeldung bei einem registrierten Konto (Account) Anmeldung bei einem registrierten Konto (Account) Aufrufen des Anmeldefensters Geben sie in die Adresszeile ihres Internet-Browsers die Adresse (http://www.quid4bid.com) ein. Sie können entweder auf die

Mehr

:LQGRZV([SORUHU &KULVWLQH%HHU

:LQGRZV([SORUHU &KULVWLQH%HHU Der Windows Explorer 1. Starten des Windows Explorers Die Aufgabe des Explorers ist die Verwaltung und Organisation von Dateien und Ordnern. Mit seiner Hilfe kann man u.a. Ordner erstellen oder Daten von

Mehr

Firefox: Die Lesezeichen im Griff

Firefox: Die Lesezeichen im Griff Firefox: Die Lesezeichen im Griff Die Favoriten im Internet Explorer sind eine Lachnummer gegen die Lesezeichen im Firefox. Eingetippte Schlagworte reichen, um sie aufzurufen. Außerdem können ganze Befehlsfolgen

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Bauteilattribute als Sachdaten anzeigen

Bauteilattribute als Sachdaten anzeigen Mit den speedikon Attributfiltern können Sie die speedikon Attribute eines Bauteils als MicroStation Sachdaten an die Elemente anhängen Inhalte Was ist ein speedikon Attribut?... 3 Eigene Attribute vergeben...

Mehr

2. Speichern und öffnen

2. Speichern und öffnen 2. Speichern und öffnen In diesem Modul lernen Sie, ein Dokument zum ersten Mal zu speichern, zu öffnen, nochmals zu speichern unter demselben Namen, nachdem Sie etwas geändert haben, zu speichern als

Mehr

Berechnungen in Access Teil I

Berechnungen in Access Teil I in Access Teil I Viele Daten müssen in eine Datenbank nicht eingetragen werden, weil sie sich aus anderen Daten berechnen lassen. Zum Beispiel lässt sich die Mehrwertsteuer oder der Bruttopreis in einer

Mehr

Programme im Griff Was bringt Ihnen dieses Kapitel?

Programme im Griff Was bringt Ihnen dieses Kapitel? 3-8272-5838-3 Windows Me 2 Programme im Griff Was bringt Ihnen dieses Kapitel? Wenn Sie unter Windows arbeiten (z.b. einen Brief schreiben, etwas ausdrucken oder ein Fenster öffnen), steckt letztendlich

Mehr

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten Anleitung zum Login über die Mediteam- Homepage und zur Pflege von Praxisnachrichten Stand: 18.Dezember 2013 1. Was ist der Mediteam-Login? Alle Mediteam-Mitglieder können kostenfrei einen Login beantragen.

Mehr

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E S TAND N OVEMBE R 2012 HANDBUCH T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E Herausgeber Referat Informationstechnologie in der Landeskirche und im Oberkirchenrat Evangelischer Oberkirchenrat

Mehr

Folgeanleitung für Klassenlehrer

Folgeanleitung für Klassenlehrer Folgeanleitung für Klassenlehrer 1. Das richtige Halbjahr einstellen Stellen sie bitte zunächst das richtige Schul- und Halbjahr ein. Ist das korrekte Schul- und Halbjahr eingestellt, leuchtet die Fläche

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications Windows 8 Systemsteuerung > Programme > Windows Features aktivieren / deaktivieren > Im Verzeichnisbaum

Mehr

Herzlich Willkommen bei der BITel!

Herzlich Willkommen bei der BITel! Herzlich Willkommen bei der BITel! Damit Sie auch unterwegs mit dem iphone Ihre E-Mails abrufen können, zeigen wir Ihnen Schritt für Schritt wie Sie Ihr BITel-Postfach im iphone einrichten. Los geht's:

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Einkaufslisten verwalten. Tipps & Tricks

Einkaufslisten verwalten. Tipps & Tricks Tipps & Tricks INHALT SEITE 1.1 Grundlegende Informationen 3 1.2 Einkaufslisten erstellen 4 1.3 Artikel zu einer bestehenden Einkaufsliste hinzufügen 9 1.4 Mit einer Einkaufslisten einkaufen 12 1.4.1 Alle

Mehr

Handbuch B4000+ Preset Manager

Handbuch B4000+ Preset Manager Handbuch B4000+ Preset Manager B4000+ authentic organ modeller Version 0.6 FERROFISH advanced audio applications Einleitung Mit der Software B4000+ Preset Manager können Sie Ihre in der B4000+ erstellten

Mehr

Installation / Aktualisierung von Druckertreibern unter Windows 7

Installation / Aktualisierung von Druckertreibern unter Windows 7 Rechenzentrum Installation / Aktualisierung von Druckertreibern unter Windows 7 Es gibt drei verschiedene Wege, um HP-Druckertreiber unter Windows7 zu installieren: (Seite) 1. Automatische Installation...

Mehr

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG it4sport GmbH HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG Stand 10.07.2014 Version 2.0 1. INHALTSVERZEICHNIS 2. Abbildungsverzeichnis... 3 3. Dokumentenumfang... 4 4. Dokumente anzeigen... 5 4.1 Dokumente

Mehr

Mit jedem Client, der das Exchange Protokoll beherrscht (z.b. Mozilla Thunderbird mit Plug- In ExQulla, Apple Mail, Evolution,...)

Mit jedem Client, der das Exchange Protokoll beherrscht (z.b. Mozilla Thunderbird mit Plug- In ExQulla, Apple Mail, Evolution,...) Das tgm steigt von Novell Group Wise auf Microsoft Exchange um. Sie können auf ihre neue Exchange Mailbox wie folgt zugreifen: Mit Microsoft Outlook Web Access (https://owa.tgm.ac.at) Mit Microsoft Outlook

Mehr

1. Einführung. 2. Weitere Konten anlegen

1. Einführung. 2. Weitere Konten anlegen 1. Einführung In orgamax stehen Ihnen die gängigsten Konten des Kontenrahmens SKR03 und SKR04 zur Verfügung. Damit sind im Normalfall alle Konten abgedeckt, die Sie zur Verbuchung benötigen. Eine ausführliche

Mehr

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein Einrichtung von orgamax-mobil Um die App orgamax Heute auf Ihrem Smartphone nutzen zu können, ist eine einmalige Einrichtung auf Ihrem orgamax Rechner (bei Einzelplatz) oder Ihrem orgamax Server (Mehrplatz)

Mehr

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline Öffentliche Ordner Offline INDEX Öffentliche Ordner erstellen Seite 2 Offline verfügbar einrichten Seite 3 Berechtigungen setzen Seite 7 Erstelldatum 12.08.05 Version 1.1 Öffentliche Ordner Im Microsoft

Mehr

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen Wir wollen, dass ihr einfach für eure Ideen und Vorschläge werben könnt. Egal ob in ausgedruckten Flyern, oder in sozialen Netzwerken und

Mehr

Die Cloud der Gruppe Clubmädchen

Die Cloud der Gruppe Clubmädchen Die Cloud der Gruppe Clubmädchen Zuerst ein eigenes Google-Konto einrichten: Um die Cloud der Clubmädchen nutzen zu können, benötigen sie ein eigenes Google-Konto für welches eine Freigabe für die Clubmädchen-Cloud

Mehr

Partitionieren in Vista und Windows 7/8

Partitionieren in Vista und Windows 7/8 Partitionieren in Vista und Windows 7/8 Windows Vista und Windows 7 können von Haus aus Festplatten partitionieren. Doch die Funktion ist etwas schwer zu entdecken, denn sie heißt "Volume verkleinern".

Mehr

Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote

Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote Anleitung zum erfassen von Last Minute Angeboten und Stellenangebote Zweck dieser Anleitung ist es einen kleinen Überblick über die Funktion Last Minute auf Swisshotelportal zu erhalten. Für das erstellen

Mehr