Java ist neben einer indonesischen Insel, einem Modetanz der 1920er, Grundgewebe aus Leinen, einem Brettspiel auch eine objektorientierte Programmiersprache.
Java wurde von der Firma Sun Microsystems um 1995 angeboten und bis heute weiterentwickelt. Mit Java kann man Anwendungen von diversem Umfang und Größe programmieren.
Was bedeutet projektorientierte Programmiersprache?
Bei Java wird die Programmierung über Klassen und Projekte vorgenommen. Diese können durch Methoden verändert werden.
Das besondere von Java ist die Plattformunabhängigkeit. Das heißt, dass Java als Ergebnis einer Programmierung einen interpretierbaren Bytecode erzeugt. Dieser Code wird über den Java Runtime Environment eingelesen und ausführbar gemacht. Das Betriebssystem ist total egal, so lange Java Runtime Environment vorhanden ist.
Wichtig: Die Programmiersprache ist nicht gleich der Skriptsprache JavaScript. JavaScript benutzt ähnliche Befehle wie Java, aber der Befehlsumfang ist viel geringer.
Ich habe diese App für meine 9er Informatikkurse geschaffen.
Einige werden nun denken "Wie 9er? Das ist doch Stoff für die Oberstufe" oder ähnliches. Da haben Sie wohl auch recht, aber das Feedback meiner Schülerinnen und Schüler, die zu anderen Schulen gehen und mir berichten, dass sie sehr gut dort im Informatikunterricht zurecht kommen, stärkt meinen Kurs den Schülerinnen und Schülern Java näher zu bringen.
Meine Schüler haben alle ihr eigenes mobiles Gerät (BYOD) und können somit parallel zu Lern-PDFs auch diese App nutzen. Gleichzeitig programmieren sie mit! Da ich somit mehrere Reize anspreche, erlebe ich Schülerinnen und Schüler, die sich sehr motiviert und auch erfolgreich an Java trauen.
Versuchen Sie es doch auch einfach!
An der WBRSX benutzen wir BlueJ als Entwicklungsumgebung. Privat nutze ich lieber das Programm eclipse, aber für den Schulbereich scheint mir BlueJ als nicht ganz so komplexe Entwicklungsumgebung am geeigneten zu sein.
In BlueJ steht neben dem verkürzten Klassendiagramm ein Texteditor mit Syntaxhervorhebung und Autovervollständigung zur Verfügung. Somit können die Schülerinnen und Schüler sofort sehen, welche Befehle sich wo auswirken und die, für die Schüler schwierige Klammersetzung wird vereinfacht.
BlueJ kann man für Windows, Mac OS X, Solaris und Linux KOSTENLOS herunterladen und auf seinen Rechner installieren. Damit BlueJ auch funktioniert, benötigen Sie zu dem noch eine aktuelle "Java Virtual Machine" und ein aktuelles JDK.
Nach der Installation wird BlueJ in englischer Sprache ausgeführt. Wen es stört, kann dies mit wenigen Handgriffen ändern. Im Ordner BlueJ (bei den meisten PCs unter C:/Programme) gibt es einen Ordner, der heißt lib. Dort öffnen Sie die Datei bluej.defs mit einem Editor und ändern die Zeile bluej.language=english in bluej.language=german.
Wie in fast jedem Javakurs möchte ich nicht die Tradition brechen und bleibe beim ersten Programm, dass hello world ausgibt.
Dabei werdet Ihr automatisch den Umgang mit BlueJ so wie das Grundgerüst eines Java-Programmes kennenlernen.
Youtube-Link
Hier ist nun eurer erster Code:
class HelloWorld
= Hauptklasse mit dem Namen HelloWorld
public static void main(String[] args)
= für alle verfügbar (public) immer verfügbar und unverändebar (static) ohne Rückgabewert (void) Parameter, Variable (String[] args)
System.out.println("...")
= Anweisung an die Klasse (System.out), die Methode println() ("print line") auszuführen, also eine Zeichenkette anzuzeigen
A U F G A B E N:
1. Versucht das Video oben nach zu machen!
2. Was macht BlueJ, wenn Ihr eine Klammer oder Semikolon vergesst?
3. Versuche selber Texte zu schreiben, die BlueJ anzeigen soll!
Variablen bezeichnen Werte, die sich während des Programmablaufs ändern.
Am Anfang werden wir uns mit den Variablen: String, integer, double und boolean begnügen, aber es gibt noch einige mehr!
Auch diesen Code wollen wir uns ganz detailiert angucken, damit es einigermaßen übersichtlich bleibt, teile ich den Quelltext.
Wenn bei der Zusammenfassung etwas nicht erklärt wird, haben wir das schon vorher besprochen.
int zahl=5; (int zahl_zwei=2;)
= Integer (int) mit dem Namen zahl wird auf die Ganzzahl 5 gesetzt
double zahl_drei=5; (double zahl_vier=2;)
= Double mit dem Namen zahl_drei wird auf die Zahl 5,00 gesetzt
int erg_eins=zahl/zahl_zwei;
= Integer (int) mit dem Namen erg_eins (Ergenbis eins) errechnet die Ganzzahl 5 durch die Ganzzahl 2. Ergebnis ist bei Integer 2, da ja Ganzzahlen berechnet wurden
double erg_zwei=zahl/zahl_zwei;
= Double mit dem Namen erg_zwei errechnet die Ganzzahl 5 durch die Ganzzahl 2. Ergebnis ist bei Double 2.0, denn zahl und zahl_zwei sind ja Integer (Ganzzahlen). Double (Kommazahlen) bezieht sich dann aufs Ergebnis, also 2,0
double erg_drei=zahl_drei/zahl_vier;
= Double mit dem Namen erg_drei errechnet die Kommazahl 5,0 MINUS die Kommazahl 2,0. Ergebnis lautet 3,0
// da zahl, wie auch .....
=
Kommentare, die nicht ausgeführt werden, aber jedem Betrachter des Quelltextes eine Erklärung bringen
String hallo="Hallo, hier versuche ich euch....";
=
Definierung der Zeichenkette (String) hallo
System.out.println(in + doub);
=
Zeige eine Zusammensetzung von String in und String doub
System.out.println("Rechnung 1:" + erg_eins);
=
Zeige "Rechnung 1:" an zzgl. dem Ergebnis eins.
Es gibt unter anderem aritmetische Operatoren für mathematische Berechnungen und Vergleichsoperatoren, wie auch logische Operatoren. Diese werden wir uns sofort auch genauer ansehen, aber Euch sollte bewusst sein, dass es noch mehr Operatorenarten existieren.
Was sind nun Operatoren? Das erklären am Besten die folgenden Tabellen.
arithmetische Operatoren:
diese Operatoren werden für mathematische Berechnungen benutzt
Operator | Funktion |
---|---|
+ |
Verleiht einer Variable ein positives Vorzeichen |
- |
Verleiht einer Variable ein negatives Vorzeichen |
+ |
führt eine Addition durch |
- |
führt eine Subtraktion durch |
* |
führt eine Multiplikation durch |
/ |
führt eine Division durch |
% |
(Modulo) führt eine Division durch, wobei der Restwert geliefert wird. |
Vergleichsoperatoren:
vergleichen von Ausdrücken miteinander und liefert ein boolesches Ergebnis (WAHR oder FALSCH)
Operator | Funktion |
---|---|
== |
testet zwei Variablen auf Gleichheit |
!= |
testet zwei Variablen auf Ungleichheit |
< |
prüft, ob der linke Operand kleiner ist |
> |
prüft, ob der linke Operand größer ist |
<= |
prüft, ob der rechte Operand größer oder gleich ist |
>= |
prüft, ob der rechte Operand kleiner oder gleich ist |
logische Operatoren:
vergleichen von boolesche Werten! Im Gegensatz zu Vergleichsoperatoren werden nun die entsprechende Ergebnisse weiterverarbeitet.
Operator | Funktion |
---|---|
! |
NICHT |
&& |
UND |
& |
UND |
II |
ODER |
I |
ODER |
^ |
ODER (exklusiv) |
Einige Operatoren habt ihr schon genutzt, andere werden wir in dem nächsten Programmn noch anwenden.
A U F G A B E N:
1. Versucht das Video oben nach zu programmieren!
2. Erstelle ein eigenes Programm, das die unterschiedlichen Variablen erklärt!
3. Welche Operatoren haben wir schon benutzt?
Wir Java Programmierer, also auch ihr jetzt ;-), nennen Bedingungen auch IF-Anweisungen.
Diese IF-Anweisungen dienen dazu einen Ausdruck auszuwerten und je nach Ergebnis weiterzuverfahren. Hierbei spielt der Datentyp Boolean eine ganz besondere Rolle, denn der Ausdruck MUSS einen Wert dieses Datentypes haben.
Fast in jedem größeren Programm werdet Ihr demnächst IF-Anweisungen benutzen, da es die einfachste logische Form ist, das Programm dahin zu führen, wo man es haben möchte. Hierbei kann man diese Bedingungen in unterschiedliche Situationen einsetzen.Da die IF-Anweisung relativ leicht zu verstehen ist, werde ich in dieser Programmierübung noch einige Wiederholungen von den Themen zuvor einbringen, diese werde ich dann in den Kommentaren nochmals darstellen:
Hier ist nun der entsprechene Code zum Nachlesen. Damit es einfacher zu erklären ist, habe ich den Quellcode wieder in mehrere Abschnitte geteilt:
int zahl=2; int var=1;
= Integer zahl, wie auch Integer var, also wir wollen die zahl 2, wie auch var 1 prüfen
if (zahl==2)
= es wird überprüft, ob die Integer Variable zahl den Wert 2 besitzt.
System.out.println("wahr")
= Anweisung, wenn die Überprüfung korrekt ist, dann schreibe wahr
else
= Hinweis, was passieren soll, wenn die Bedingung nicht stimmt
System.out.println("unwahr")
= Anweisung, wenn die Überprüfung NICHT korrekt ist, dann schreibe unwahr
if ((zahl==2) && (var==1)
= es wird überprüft, ob die Integer Variable zahl den Wert 2 besitzt und zeitgleich Interger Variable var 1 ist.
Man kann also Bedingung verknüpfen! Dies geschieht durch eine UND-Verknüpfung (&&) oder mit einer ODER-Verknüpfung (II)!
if (zahl!=2)
if (zahl>2)
if (zahl<2)
Mit if-else Anweisungen kann man seinen Code weiter verzweigen, in dem man Ihr einfach mehrere if-else-Anweisungen nacheinander schreibt.
A U F G A B E N:
1. Versucht das Video oben nach zu machen!
2. Welche Operatoren habt Ihr kennengelernt?
3. Schreibe ein eigenes kleines Programm, dass anzeigt, wenn die Zimmertemperatur unter 17 Grad ist, bitte Heizung einschalten, wenn die Temperatur über 22 Grad ist, bitte Hezung herunterdrehen!
4. Schreibe ein Programm, dass eine verknüpfte IF-Anweisung beinhaltet!
Im letzten Kapitel habt Ihr IF-Anweisungen kennengelernt. Diese Bedingung leitet eine Abfrage ein, also ist etwas Bestimmtes erfüllt oder nicht. Wenn die Bedingung erfüllt ist, wird der nächste Befehl bzw. Befehle ausgeführt. Natürlich kann auch else verwendet werden.
Eine Schleife wird durch das Wort while eingeleitet. Ähnlich wie bei der IF-Bedingung wird überprüft, ob eine Bedingung erfüllt wird oder nicht
ABER: Solange die Bedingung FALSCH ist, wird die Schleife immer wieder wiederholt bzw. umgekehrt!!!
Wir schauen uns mal eine kleine Schleife an! Hier benutze ich eine for-Schleife. Dies ist eine spezialisierte while-Schleife, die überwiegend beim Zählen verwendet wird.
Wie gehabt, sehen wir uns diesen Code auch kurz an:
for (int i=0;i<=10; i=i+1)
= Integer i, wird auf 0 gesetzt, danach kommt der Wert, wie lange die Schleife durchlaufen werden soll. Hier bis einschliesslich 10. Zuletzt kommt der Befehl, dass i immer mit 1 erhöht wird.
while-Schleife (Abweisschleife)
do-while-Schleife (Durchlaufschleife)
Alle drei Varianten lassen sich jeweils durch eine andere beiden ersetzen.
DOCH jeder Schleifentyp beschreibt bestimmte Algorithmen am besten!!
sehen wir uns mal Beispiele dazu an:
Die while-Schleife ist eine Abweisschleife!
Die Bedingung kann auf ZWEI verschiedenen Wegen verlassen werden
(Bedingung ist wahr oder falsch)
Ist die Bedingung schon bei der ersten Auswertung nicht erfüllt, wird der Schleifenkörper überhaupt nicht ausgeführt
(abweisende Schleife)
Vielleicht hilft euch folgende Skizze, dies noch besser zu verstehen:
Die do-while-Schleife ist eine Durchlaufschleife!
Die Bedingung kann auf ZWEI verschiedenen Wegen verlassen werden
(Bedingung ist wahr oder falsch)
Der Schleifenkörper wird mindestens einmal ausgeführt
(annehmende Schleife)
Vielleicht hilft wiederum folgende Skizze, dies noch besser zu verstehen:
A U F G A B E N:
5. Versucht die Beispiele der do-while und der while Schleife zu komplettieren und unter BlueJ zum laufen zu bekommen?
6. Was passiert beim folgenden Programm und WARUM?
String s = "hallo"; for (int i = 0; i < s.length(); i++) { System.out.println(s.charAt(i));}
Wir sind nun so weit, dass wir mehr mit unseren Programen anfangen können. Jetzt wollt Ihr bestimmt auch mit dem User am PC zusammen was machen. Zum Beispiel muss der User etwas eingeben und euer Programm reagiert auf diese Eingabe!
Eingaben mit der Klasse Scanner
Als erstes werdet Ihr feststellen, dass es unter Java fertige Klassen und Funktionalitäten existieren. Diese kann man am Anfang einfach importieren und ihr könnt diese Funktionen dann anwenden.
Wie gehabt, sehen wir uns diesen Code auch kurz an:
import java.util.Scanner;
= importiere die vorgegebene Klasse Scanner, Fachbegriff hierfür lautet Package-Import
(Wenn ihr import java.util.*; anwendet, werden alle bekannten Pakete importiert)
Scanner eingabe = new Scanner(System.in);
= Die Variable eingabe wird gesetzt, nämlich auf die kommende Eingabe (System.in)
(System.in ist ein inputStream, dass heißt die Eingabe wird ins Programm geschrieben.)
double zahl1 = eingabe.nextDouble ();
= wie stellen ersteinmal fest, das zahl1 eine Kommazahl sein muss und das die Variable aus der Ausgabe gelesen wird (eingabe.nextDouble ())
double durchschnitt = (zahl1 + zahl2 + zahl3) /3;
= Die DOUBLE Variable durchschnitt errechnet sich aus der Sume von zahl1 - zahl3 geteilt durch 3
Bevor wir uns ansehen, wie man Arrays anwenden kann, sehen wir uns mal Tabellen an:
Das ist | eine | 1-dimensionale | Liste - | also eine Zeile | |||
---|---|---|---|---|---|---|---|
Das ist | eine | 2-dimensionale | Liste - | also bestehend | |||
---|---|---|---|---|---|---|---|
aus | Spalten und | Zeilen | |||||
Jetzt wisst Ihr, was ein und zwei dimensionale Listen sind. Es gibt aber auch 3-Dimensionale und 4 Dimensionale Listen, usw..
3-Dimensionale Listen sind zum Beispiel Bücher, die bestehend aus vielen 2 Dimensionalen Listen bestehen. Somit wäre eine Bücherregal mit vielen Büchern dem 4 Dimensionalen Listen ähnlich. Viele Regale wären dann eine Dimension mehr usw... .
String monate[]={"Januar", ..., "Dezember"};
= Variabletyp String mit dem Name monate ist ein array[]. Diese kann man nun beschreiben {}
HINWEIS: Der PC fängt bei 0 an zu zählen! Also Januar=0 und Dezember=11!
System.out.println(monate[11]);
= gebe aus (System.out.println) den Array (monate) und zwar den 11 [11]
System.out.println(monate.length);
= gebe aus (System.out.println) den Array (monate) aus, und zwar wie viele Elemente sich im Array befinden (.length)
HINWEIS: Wenn man direkt ein Element aus dem Array ansprechen möchte, kommt dies in die eckige Klammern [].
A U F G A B E N:
1. Erstelle ein Array mit 5 beliebigen Zahlen und lass dir diese Ausgeben
2. Erstelle ein array mit 5 beliebeigen Strings und lass dir diese Ausgeben
3. Erstelle eine Matrix mit den Zahlen 1 - 6 und lass dir diese Ausgeben (2 Zeilen / 3 Spalten)
In diesem Kapitel beschäftigen wir uns mit den Grundlagen der Oberflächenprogrammierung. Die grafische Benutzeroberfläche wird auch als Graphical User Interface, kurz GUI, bezeichnet. Es gibt einige Tools oder auch Entwicklungsumgebungen, mit denen man die Oberflächen per Drag and Drop erstellen kann. Eine unserer Meinung nach empfehlenswertesten Entwicklungsumgebungen für die GUI ist NetBeans. Es ist dort sehr angenehm und einfach sich seine Oberfläche zusammen zu klicken, jedoch fehlen manchem Entwickler die Grundlagen, wie eine Oberfläche sich überhaupt zusammensetzt und wie man sie auch von "Hand" erzeugt. Diese Grundlagen wollen wir Ihnen hier vermitteln. In Java gibt es zwei Bibliotheken für die GUI-Programmelemente. Das mitterweile veraltete Abstract Windowing Toolkit, auch kurz AWT genannt, und die Swing-Bibliotheken. Auf die veralteten Bedienelemente des AWT's werden wir in diesem Tutorial nicht zu sprechen kommen. Wir geben in den folgenden Unterkapiteln eine Übersicht über die Bedienelemente, den Aufbau einer grafischen Benutzeroberfläche, mögliche Designs (Layouts) und die Interaktion mit der Oberfläche (Eventhandling).
In diesem Kapitel wollen wir eine kleine Übersicht über Fenster- und Dialogklassen geben. Diese Klassen sind für eine Anwendung mit Benutzeroberfläche unerlässlich. Insbesondere die Java-Klassen JFrame und JDialog bilden das Grundgerüst einer jeden Anwendung. Zu den Fenster- und Dialogklassen zählen:
Klasse |
Kurzbeschreibung |
JFrame | Dieses Hauptfenster bildet die Grundlage der meisten GUIs. Es zeichnet sich durch eine Menüleiste aus. |
JDialog | Ein Dialogfenster, das in der Regel nur einfache und nur wenige Bedienelemente besitzt und über keine Menüleiste verfügt. Es ist immer abhängig von einem anderen Fenster. |
JColorChooser | Ein Dialog, über das aus einer Farbpalette eine Farbe ausgewählt werden kann, wie man es aus Grafikprogrammen kennt. Dieser kann in einen JDialog oder JFrame integriert werden. |
JFileChooser | Mit dem JFileChooser können Dateien ausgewählt werden. Dieser wird daher meistens eingesetzt, um Dateien zu öffnen oder zu speichern. |
JOptionPane | Das JOptionPane ist wahrscheinlich einer der bekanntesten Dialoge. Es wird oft für Fehlermeldungen oder Benutzerbestätigungen verwendet ( z.B. "Wollen Sie wirklich löschen?") |
JFRAME
JFrame ist das Standard-Fenster für die grafische Oberflächenprogrammierung mit Swing. Es nimmt alle anderen Container und Bedienelemente auf und vereint es zu einer Oberfläche.
Ein Frame hat folgenden Aufbau:
Die hinterste Ebene soll den gesamten Frame darstellen, der sich aus den darüberliegenden Schichten zusammensetzt.
Die Basis bildet der RootPane. Dieser stellt, wie der Name bereits impliziert (engl. root = Wurzel), den Anfang eines Frames und der dazugehörigen Container-Hierarchie dar. Der RootPane enthält den sogenannten LayeredPane (von engl. layer = Ebene). Die Kinder eines LayeredPanes sind einer Ebene zugeordnet, die sich auch je nach Verwendung verschieben kann. Ein LayeredPane wiederum besitzt einen sogenannten ContentPane (von engl. content = Inhalt), welcher die eigentlichen Bedienelemente enthält, sowie eine Menüleiste (JMenuBar). Die Menüleiste ist jedoch optional. Die oberste Schicht ist der sogenannte GlassPane. Dieser liegt, wie eine durchsichtige Scheibe, direkt über dem ContentPane. Alle Panes zusammen bilden den Frame.
In der Regel wird nur auf den ContentPane, dessen Bedienelemente und seine optional vorhandene Menüleiste zugegriffen.
Schauen wir uns nun einmal ein Beispiel an, wie man einen einfachen Frame erstellen kann:
Wir erzeugen ein JFrame-Objekt mit dem new-Operator und übergeben dem Konstruktor unseren Titel. Anschließend setzen wir die Breite und die Höhe auf jeweils 200 Pixel mit der Methode setSize. Zum Schluss lassen wir uns über die Methode setVisible den Frame anzeigen.
Nach dem Ausführen des obigen Quelltextes sollten Sie folgendes Bild angezeigt bekommen:
Wir haben nun zwar ein Fenster erstellt, aber wir wissen noch nicht, wie wir dieses auch mit Elementen füllen können. Wir wollen Ihnen hier an einem sehr einfachen Beispiel demonstrieren, wie man Elemente ohne großen Aufwand und ohne ein besonderes Layout hinzufügen kann:
Die Methode add fügt neue Komponenten unserem Frame hinzu. Wir erweitern nun das obige Beispiel:
Nun enthält unser Beispiel-Fenster eine JLabel-Komponente (Beschriftung). Wie Sie sehen, haben wir hier nur eine import-Anweisung für unser JLabel hinzugefügt und die Methode add aufgerufen, der wir als Parameter ein Objekt der Klasse JLabel übergeben haben. Dem Konstruktur der Klasse JLabel haben wir dabei den gewünschten Text für die JLabel-Komponente übergeben.
Beim Ausführen des veränderten Quellcodes erhalten wir nun folgendes Bild:
Über die Methode add können auf diese Weise beliebige Bedienelemente unserer Oberfläche hinzugefügt werden. Wir werden in den späteren Kapiteln der Bedienelemente jeweils zeigen, wie das jeweilige Bedienelement funktioniert und einem Frame hinzugefügt werden kann. Außerdem werden Sie später erfahren, wie Sie Einfluss auf die Positionierung der Elemente über sogenannte Layouts nehmen.