Informatik-AG—1. Woche: Hallo Java-Knopf Bernhard Haubold 31. August 2015 1 Einleitung Wir fangen mit Java an. Heute wollen wir lernen, wir “graphische Elemente” funktionieren. JFrame MeinRahmen main(a:String[]):void Abbildung 1: Die Klasse MeinRahmen erbt von der Klasse JFrame, die Teil der Java-Bibliothek ist. 2 Vorbemerkungen Alle graphischen Elemente in Java müssen in einem Rahmen sichtbar gemacht werden. Besonders gut dafür geeignet ist der Rahmen, der JFrame heißt. Du kannst ihn erzeugen, indem Du die Datei MeinRahmen.java erzeugst, und dann hineinschreibst: 1 import javax.swing.*; public class MeinRahmen extends JFrame{ public static void main(String args[]){ MeinRahmen mr; 6 mr = new MeinRahmen(); mr.setSize(300, 400); mr.setTitle("Hallo Rahmen"); mr.setVisible(true); 11 } } An diesem Programm kann man schon eine Menge Java lernen: • Der Befehl import javax.swing.*; stellt die Graphikbibliothek von Java zur Verfügung, die swing heißt. 1 • Die Zeile public class MeinRahmen extends JFrame deklariert die Klasse, deren Name mit dem Namen der Datei übereinstimmen muss. In unserem Fall ist die Klasse abgeleitet von einer anderen Klasse, nämlich dem JFrame. Damit ist MeinRahmen eine Art JFrame und “erbt” von diesem eine Reihe von Codierungsmöglichkeiten. Abbildung 1 zeigt das Verhltnis von JFrame und MeinRahmen; ein solches Diagramm nennt man ein UML-Diagramm, fr United Modeling Language. • Eine Klasse kann Funktionen enthalten, die in Java Methoden heißen. Die Klasse MeinRahmen hat eine einzige Methode, nämlich main, deklariert durch public static void main(String args[]) Solch eine main Methode liefert stets den Startpunkt für ein Java-Programm. • Die Zeile MeinRahmen mr; deklariert die Variable mr vom Typ MeinRahmen. Bemerke zwei Dinge hier: Variablen Namen werden normalerweise klein geschrieben, Klassennamen groß. Außerdem ist eine Klassendeklaration gleichzeitig die Deklaration eines Datentyps. Aber was ist ein Datentyp? Ein Datentyp erklärt, welche Art von Daten einer bestimmten Variablen zugewiesen werden kann. Das könnten ganze Zahlen sein, oder Zeichenketten, oder eben auch Objekte vom Typ MeinRahmen. • In der Zeile mr = new MeinRahmen(); wird ein Objekt vom Typ MeinRahmen neu erzeugt und der Variablen mr zugewiesen. Das Erzeugen eines Objekts bezeichnen Programmierer als “Instanziierung”. • Jetzt können wir die in MeinRahmen deklarierten Methoden ansprechen, indem wir zum Beispiel in der nächsten Zeile schreiben mr.setSize(300, 400); setSize ist eine Methode, die MeinRahmen von JFrame geerbt hat. Aber woher weiß man, welche Methoden eine Klasse bereitstellt? Das ist beschrieben in der sogenannten “Application Programming Interface”, unter Programmierern kurz “API” genannt. Du findest einen Link zur Java-API auf der Netz-Seite unserer AG: http://docs.oracle.com/javase/7/docs/api/ In der Zeile mr.setTitle("Hallo Rahmen"); wird eine weitere Methode von MeinRahmen aufgerufen, diesmal geben wir dem Rahmen einen Namen. Und schließlich müssen wir den Rahmen noch mit der Zeile mr.setVisible(true); sichtbar machen. • Jetzt wollen wir aber endlich loslegen! Compiliere das Programm mit dem Befehl javac MeinRahmen.java und lasse es laufen mit java MeinRahmen & 2 3 Aufgaben Aufgabe 3.1 Ersetze den Title von MeinRahmen durch “Hello JFrame”. Aufgabe 3.2 Erzeuge zwei Rahmen, mr1 und mr2. mr1 heißt “Hallo Rahmen” und mr2 “Hello JFrame”. Aufgabe 3.3 In der letzten Aufgabe lagen die beiden Fensterrahmen übereinander. Das können wir ändern, indem wir zum Beispiel schreiben: mr2.setLocation(100,100); Schreibe Dein Programm so um, dass der zweite Fensterrahmen den ersten nicht vollständig verdeckt. Aufgabe 3.4 Als nächstes wollen wir dem ersten Rahmen einen Knopf hinzufügen. Dazu benötigen wir direkt hinter der Deklaration von mr1 und mr2 die Deklaration eines Knopfes: JButton jb; Weiter unten müssen wir den Knopf dann erzeugen jb = new JButton("Button"); und ihn dem Rahmen hinzufügen: mr1.add(jb); Ändere die Beschriftung des Knopfes von “Button” zu Knopf. 3 Lösungen Lösung zu Aufgabe 3.1: mr.setTitle("Hello JFrame"); Lösung zu Aufgabe 3.2: 4 9 public static void main(String args[]){ MeinRahmen mr1, mr2; mr1 = new MeinRahmen(); mr2 = new MeinRahmen(); mr1.setSize(300, 400); mr2.setSize(300, 400); mr1.setTitle("Hallo Rahmen"); mr2.setTitle("Hello JFrame"); mr1.setVisible(true); mr2.setVisible(true); } Lösung zu Aufgabe 3.3: mr1.setLocation(0, 0); mr2.setLocation(100,100); Lösung zu Aufgabe 3.4: Du kannst entweder schreiben jb.setTitle("Knopf"); oder gleich bei der Instanziierung jb = new JButton("Knopf"); 4