Konsolenprogramme II: Ein Fenster

Jetzt steigen wir auch schon genauer in die objektorientierte Programmierung ein und wollen unser Programm dabei so ausbauen das „HalloWelt!“ nicht mehr in der Konsole, sondern in einem Fenster erscheint.

Wir ergänzen unseren Quellcode folgendermaßen:

package start;

// importiere Klassen für Fenster (JFrame), Container (JPanel) und Text (JLabel)
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;

public class HalloWelt extends JFrame {  // extends JFrame: erweitert die Klasse um ein Fenster
	
 public static void main(String[] args) { // Einstiegsmethode

  new HalloWelt();
 }

 public HalloWelt() {  // Konstruktor
  this.setDefaultCloseOperation( EXIT_ON_CLOSE ); //definiert Schließaktion
  this.setBounds( 0, 0, 900, 500 ); // legt Fenstergröße fest
  this.setLocationRelativeTo( null ); // legt Relativposition fest
  this.setAlwaysOnTop( true ); // Fenster in den Vordergrund
  this.setVisible( true ); // macht das Fenster sichtbar 
  schreibe();   // ruft die schreibe-Methode auf
 }
	  
public void schreibe() {   // unsere Schreibmethode
 
// erstellt einen unsichtbaren Container namens panel 
 JPanel panel = new JPanel(); 
 
 this.add(panel);  // fügt dieses Panel dem Fenster hinzu
 
 // erstellt das Label 
 JLabel label = new JLabel ("Hallo Welt!", JLabel.CENTER);
 
 panel.add(label); // fügt das Label dem Panel-Container hinzu
 
// Gibt zusätzlich HalloWelt in der Console aus.
 System.out.println( "HalloWelt!" ); 
 }

}

Scheint ein wenig viel zu sein, aber lasst uns das Zeile für Zeile durchgehen.
package start; Gibt an mit welchem package wir arbeiten. In diesem Fall haben wir das Package start selbst angelegt (Wir erinnern uns, ein package ist ein spezieller Ordner der Java-Dateien enthält.
Zeile 4-6 import.. Hier werden Klassen aus der Klassenbibliothek importiert. Diese „Bauteilbeschreibungen“ benötigen wir um Fenster (JFrame), unsichtbare Container (JPanel) und Labels (für Text und Beschriftungen) in unserem Programm zu benutzen. Für diese grafischen Elemente nutzen wir Klassen des Pakets Swing. Swing wird am häufigsten eingesetzt um grafische Oberflächen in Java zu erstellen. Es sorgt dafür das diese Oberflächen auf allen Betriebssystemen gleich aussehen da die Elemente von Java selbst gerendert werden. Man spricht von einer leichtgewichtigen Oberfläche. Das Gegenteil wäre das Paket AWT, das eine schwergewichtige Oberfläche darstellt, die vom Betriebssystem des jeweiligen Computers gerendert wird.

Zeile 8 ..HalloWelt extends JFrame extends bedeutet das die Klasse um die nachfolgende Klasse erweitert wird. Unsere Klasse HalloWelt wird dadurch eine Unterklasse der Klasse JFrame.
In Java werden Klassen hierachisch verwaltet. Die Klasse von der etwas geerbt wird heisst Oberklasse (auch Eltern– oder Superklasse genannt) in diesem Fall ist die Oberklasse von HalloWelt also JFrame.

Zeile 10 public static void main.. die Einstiegsmethode. Jedes Programm braucht einen Beginn oder Einstieg, dort wo das Programm starten soll. In unserem Fall ist es das erste Fenster das geöffnet wird. Also unsere zum JFrame erweiterte HalloWelt Klasse.
public bedeutet, wir wir schon wir schon wissen, das diese Methode öffentlich ist.

Der Modifikator static kann bei Variablen und Methoden eingesetzt werden. Bei Methoden bedeutet dies, das jene nur über den Klassennamen, nicht aber über ein daraus erstelltes Objekt abgefragt werden können.
Beispiel: Angenommen die Klasse heisst Auto und ein daraus erstelltes Objekt Mercedes. Der Aufruf einer Objektmethode würde normalerweise so erfolgen: mercedes.objektmethode. Wenn die Methode aber static ist kann sie nur über die Klasse d.h. Auto.objektmethode aufgerufen werden.
Ist eine Variable static bedeutet dies, das bei einer Änderung jener Variable, alle Objekte die aus der Klasse abgeleitet wurden den neuen Wert enthalten.
Für den Anfang merken wir uns einfach das die Einstiegsmethode immer static ist.

void bedeutet das diese Methode keinen Rückgabewert hat. Damit beschäftigen wir uns im nächsten Kapitel auch gleich mehr.

main weist darauf hin das dies die sogenannte Einstiegsmethode ist. Jedes Programm hat eine solche Methode wo das Programm beginnt.

(String[] args) eine Liste von Variablen vom Typ String, die theoretisch zu Beginn des Programmaufrufs mit übergeben werden kann. args ist der Variablenname, String der Typ. Die eckigen Klammern [] zeigen auf, das es sich um eine Liste von Daten handelt. In dieser Variablen sind sozusagen mehrere Variablen enthalten, auf die man z. B. mit args[0], args[1], args[2] etc. zugreifen könnte.

Zeile 11 new ruft den Konstruktor oder die Konstruktormethode auf. Wie wir bereits aus den Grundlagen der Objektorientierung wissen, hat jede Klasse eine solche Methode. Der Code in dieser Methode wird ausgeführt sobald aus einer Klasse mit new ein neues Objekt erstellt wird.

Zeile 14 public HalloWelt() die ist die Konstruktormethode.

Da unsere Klasse HalloWelt um JFrame erweitert wurde und somit auch ein Fenster ist, können wir auf alle Methoden von JFrame zugreifen. Unsere Klasse „erbt“ diese von JFrame. Auf dieser Seite unter „Method Summary“ können wir alle Methoden nachlesen. In den nachfolgenden Zeilen benutzen wir einige solcher Methoden. Wobei sich this auf das Objekt bezieht das gerade erstellt wird, also HalloWelt.

Zeile 17 this.setDefaultCloseOperation( EXIT_ON_CLOSE ); legt fest was was passieren soll wenn das Fenster geschlossen wird. In diesem Fall möchten wir das es einfach sofort geschlossen wird.

Zeile 19 this.setBounds(0,0,900,500); legt die Größe des Fensters in Pixel fest (X-Position, Y-Position, Breite, Höhe).

Zeile 21 this.setLocationRelativeTo( null ); legt die Relativposition fest. Null bedeutet das es zentriert dargestellt wird. Man könnte aber auch ein anderes Objekt/Fenster festlegen von dem die Position abhängig ist.

Zeile 23 this.setAlwaysOnTop(true); setzt das Fenster in den Vordergrund, also vor alle evtl. vorhandenen anderen Fenster.

Zeile 25 this.setVisible( true ); Macht das Fenster sichtbar.

Zeile 27 schreibe(); ruft die schreibe Methode auf.

Zeile 30 public void schreibe() die Schreibmethode.

Zeile 32 JPanel panel = new JPanel(); erstellt ein neues JPanel, dies ist ein Container der benutzt werden kann um andere Container oder Objekte zu ordnen.

Zeile 34 this.add(panel); fügt das erstellte Panel dem Fenster hinzu.

Zeile 36 JLabel label = new JLabel ("Hallo Welt!", JLabel.CENTER);  Es wird ein JLabel mit Namen label erstellt. Dies ist eine Beschriftung die „Hallo Welt!“ zentriert (durch Jlabel.CENTER) in dem Fenster ausgegeben wird.

Zeile 38 panel.add(label); fügt das Label dem panel hinzu.

Zeile 41 System.out.println( "HalloWelt!" ); gibt HalloWelt! zusätzlich in der Konsole aus.

Starten wir nun das Programm in der Konsole, sollte sich ein Fenster öffnen und darin „HalloWelt!“ ausgegeben werden. Wir könnten nun das Programm so verändern das wir gleich beim Programmaufruf ein Parameter übergeben das dann im Fenster erscheint. Also wir z.B. java HalloWelt Blablabla eingeben und im Fenster „Blablabla“ erscheint. Eine Möglichkeit ist es den Wert des übergebenen Anfagsparameters durchzuschleifen. D.h. wir übergeben den Wert bis in das Fenster hinein. Hierzu müssen wir nur folgendes anpassen:

Zeile 12:  new HalloWelt( args[0] ); Hier wird das erste Feld im Array args dem Konstruktor  von HalloWelt übergeben
Zeile 15:  public HalloWelt(String text) { Dem Konstruktor wird hier gesagt das er eine Variable vom Typ String erwartet und ihr den Namen text geben soll.
Zeile 21: schreibe(text); Der Methode schreibe wird der String text übergeben
Zeile 24: public void schreibe(String txt) {
Zeile 32: JLabel label = new JLabel (txt, JLabel.CENTER);

Nun öffnet sich das Fenster mit dem Text den wir am Programmstart mitgegeben haben.
Natürlich gibt es jetzt eine Fehlermeldung falls wir kein Parameter anhängen. Wir könnten das Programm noch weiter ausbauen. Aber zunächst wollen wir uns das Programmieren etwas erleichtern.
Wie wir sicherlich gemerkt haben ist es etwas umständlich mithilfe der Konsole zu programmieren. Deshalb wollen wir jetzt Eclipse installieren. Eclipse ist eine sogenannte IDE (Integrated Developer Enviroment) eine integrierte Entwicklungsumgebung oder einfach ausgedrückt: Ein extrem aufgepumpter Texteditor mit dem Programmieren mehr Spass macht.