Graphische Benutzeroberfläche in Java mit Swing



Hallo Leute, ich habe am Mittwoch 28. Februar 2018 eine Grafische Anwendung auf java2enterprise.blogspot.de hochgeladen. Natürlich bekam ich zwei Emails welches ich aus Datenschutzgründen nicht hier veröffentlichen werde. In den beiden Mails ging es im allgemeinen über das Programmieren mit dem Fenster also auch Benutzeroberfläche (GUI) gesagt. Natürlich habe ich den beiden recht gegeben und hatte mich entschieden mit meinem Team zusammen uns hinzusetzen und Themen sowie Posts über das Entwickeln beziehungsweise Programmieren mit Benutzeroberflächen in Java beschäftigt. Wir werden also in den nächsten Monaten prinzipiell uns über das Thema GUIs in Java beschäftigen. Dazu möchte ich sagen, dass wir zwischendurch auch paar Anwendungen aus dem Praxis wie die Anwendung namens KontoVerwalten 2.0 veröffentlichen. Dazu müssen wir uns aber bisschen gedulden.

Einführung:
Bevor wir mit den Grundlagen eines GUIs loslegen möchte ich euch erklären, was eine Benutzeroberfläche ist. Wir haben bis Heute nur Programme geschrieben, welches wir in der Konsole ausgeführt haben. Dies war vor ca. 25 Jahren ganz normal. Vor 25 Jahren als die ersten Heimcomputer im Markt kamen wurden sie entweder mit der Hauseigenen IBM-Software, oder mit der MS-DOS von Microsoft mitgeliefert. Jedoch hatten diese Betriebssysteme eine kleine Schwäche. Der Benutzer welches das System bedienen soll, musste sich mit dem auskennen und brauchte davor eine Schulung da man alle Befehle in die Kommandozeile eintippen musste. Heute ist es natürlich einfacher. Wir müssen nur die Mausanzeige (Pfeil) auf das Logo der gewünschten Anwendung bewegen und diese mit Doppelklick starten. Ihr habt es womöglich bemerkt wofür eine Anwendung als Benutzeroberfläche nützlich ist. Genau für die Benutzerfreundlichkeit. Ein Programm welches ich als Konsole Applikation geschrieben habe, muss ich dieses auch in der Konsole aufrufen können. Dafür muss ich die Befehle der Konsole kennen um mit ihr zu arbeiten und den Speicherort der Datei welches ich ausführen möchte.

JFrame:
Ein JFrame ist die Darstellung eines Graphischen Fensters. Die Programmierer sagen meistens Frame oder Fenster dazu und verwenden die Begriffe „JFrame, Benutzeroberfläche, GUI“ selten. Zudem besitzt ein Fenster üblicherweise ein Anwendungsicon und ein Systemmenü. Die Klasse JFrame ist als Top-Level-Container für Graphische Benutzeroberflächen und Applikationen gedacht, die eigenständig auf einem Rechner laufen sollen. In unserem nächsten Beispiel werden wir uns über den Dialogfenster JDialog beschäftigen und dieses mit JFrame vergleichen.

JFrame erzeugen:
In allen Programmiersprachen gibt es eine einzige Faustregel. Diese besagt, dass wenn der Benutzerfreundlichkeit im Vordergrund liegen soll, das Programm sehr Umfangreich und die Arbeit ebenfalls schwer sein wird. Wenn aber die Benutzerfreundlichkeit nicht das A und O des Programms sein soll, so ist das Programmieren oder das Schreiben der Quelldatei nicht allzu schwer. Um einen JFrame manuell zu erzeugen bzw zu konstruieren, muss man nur den entsprechenden Konstruktor aufrufen.
JFrame fenster = new JFrame();
JFrame fenster = new JFrame(“FENSTER“);

Wie ihr es bemerkt habt, haben wir für den Aufruf eines Fensters nur eine Anweisung beziehungsweise ein Objekt mit dem Namen “fenster“ angelegt. Wie das Fenster aussehen soll und welche Funktionen diese dem Benutzer anbieten soll ist voraussichtlich nicht unser Problem. Durch den Aufruf des Konstruktors der Klasse JFrame, legen wir den Titel des Fensters mit der Zeichenkette “FENSTER“ fest. Ich persönlich muss zugeben, dass ich diese Variante, mit dem angeben des Titels, nicht bevorzuge. Meistens fügen wir bei J2E den Titel eines Fensters mit der folgenden Anweisung ein:
Frame.setTitle(“FENSTER“);
Das funktioniert natürlich auch, nachdem der JFrame bereits sichtbar gemacht wurde. Die Methode setTitle(String titel) löst automatisch ein Neuzeichen des Fensters aus.

JFrame sichtbar machen:
Sobald wir eine Klasse mit dem Namen Fenster und eine dazugehörige Main-Methode definiert haben, rufen wir den Konstruktor der Klasse JFrame auf und verpassen dieses Fenster ein Titel. Danach führen dieses aus und was sehen wir? Nanu nicht!!! Warum das? Naja genau das meinte ich vorher mit der Faustregel. Das Programm wird zwar ausgeführt der jedoch im Hintergrund ausgeführt wird. Wir müssen noch die Methode zum zeigen des Fensters, welches wir DAVOR programmiert haben, aufrufen.
setVisible(true);
setVisible(false);

Die Methode setVisible() beschäftigt sich mit der Sichtbarkeit der von uns entworfene Fenster und kann somit nur true oder false Werte des primitiven Datentypen wahrnehmen. Entweder soll das Fenster gezeigt werden oder nicht.
JFrame f = new JFrame();
f.setTitle(“HalloFenster“);
f.setVisible(true);

Größe des Frames Angeben:
Nach dem starten der Anwendung bemerkt ihr sofort, dass das Fenster zwar angezeigt wird jedoch zu klein ist. Obwohl wir die Größe mit dem Mausklick vergrößern oder verkleinern können, müssen wir aber eine angepasste Größe angeben mit dem der Fenster als erstes angezeigt wird. Ihr würdet euch auch nicht wünschen, dass bei jedem Neustart des Browsers ihr die Größe immer Manuel vergrößern sollt.
Die Größe eines JFrames kann man folgendermaßen mit der Methode  setSize(x, y); angeben.
JFrame g = new JFrame();
g.setSize(100, 100);
Die Größe eines des JFrames festlegen zu können müssen wir wie oben die Methode, der Klasse JFrame, setSize(x, y) aufrufen. Dabei sind die x- und y-Werte wie in der zweidimensionalen Analysis als Achsen in X-Richtung (Horizontal) und Y-Richtung (Vertikal) zu betrachten. Der Ursprung O (Orgin) befindet sich jedoch nicht wie in der Mathematik unten links, sondern Oben Links an der Ecke.

Verhalten eines JFrames festlegen:
Wenn man einen JFrame erzeugt, erhält dieser von Haus aus einen gewissen Grad an Benehmen. Das bedeutet jedoch nicht, dass damit die Main-Methode beendet wird. Das kann man gut erkennen, wenn man eine Applikation mit einem JFrame von der Kommandozeile (Terminal, CMD) aus mittels “Java Klassenname“ startet. Auch nachdem man den Frame geschlossen hat, erscheint nicht die den Stopp des Programms anzeigende Zeile mit dem Pfad/Ordner in dem man sich befindet. Um erreichen zu können, dass eine Applikation beim Schließen des Fensters auch wirklich vom Arbeitsspeicher gelöscht wird, so ist die Methode setDefaultCloseOperation() eine Lösung dafür. Anhand diese Methode können wir entscheiden, ob das Programm beim Schließen des Fensters weiter ausgeführt werden soll oder nicht. Hier ein Beispiel:
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(100, 100);
frame.setTitle(“HalloFenster“);
// Standarteinstellung
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// Wird beendet sobald das Fenster Geschlossen ist.
// Muss angegeben werden, wenn wir das
// Programm beenden wollen in dem wir das Fenster schließen.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


Beim Starten der Entwicklungsumgebung Eclipse könnt ihr den Workspace in Desktop anlegen. Deshalb steht die Datei mit dem Beispielcode direkt nach speichern der Datei im Desktop.

Wir gehen auf dem Ordner, die den Namen des Projekts beinhaltet. Danach tippen wir mit der gedrückten Shift-Taste, das ist die Taste mit dem wir die Großbuchstaben eintippen können, auf die Linke Maustaste. Danach erscheint das Menü. Wir gehen dort auf dem Befehl „Eingabeaufforderung hier öffnen“.

Danach erscheint das Fenster mit der Eingabeaufforderung am Schirm in dem uns gezeigt wird, in welchem Pfad wir uns befinden. Wie befinden uns im Laufwerk „C“ mit der Benutzername xy, im Desktop, in dem jeweiligen Ordner namens „Hallo“.


Mit dem Befehl „cd“ wechseln wir den Ordner oder den Pfad. Danach geben wir mit der nächsten Aufforderung Programmiersprache, hier natürlich Java, paketName und die KlassenName in dem sich die Main-Methode befindet.

In diesem Beispiel war die Anweisung EXIT_ON_CLOSE schon einprogrammiert was bedeutet, dass wir nach dem Schließen des Fensters das Programm beendet wird und wir wieder in unserem Pfad landen. Wodurch wir weitere Angaben tätigen können.

Falls wir die Anweisung EXIT_ON_CLOSE nicht eingetragen haben, so wird zwar das Fenster auch geschlossen jedoch nicht das Programm beendet. Das sehen wir, in dem wir nach dem Schließvorgang nicht wieder in unserem Pfad landen. 

Hier ist es deutlich sichtbar, dass das Fenster geschlossen ist jedoch die Anwendung vom Speicher noch nicht gelöscht worden ist. Da wir nicht in unserem Pfad gelandet sind. Das bedeutet, dass Betriebssystem verbietet uns jegliche Eingabe da das Programm noch in der Anwendung ist. Ihr könnt es selber versuchen.

Er vergrößert sich automatisch, wenn man auf das entsprechende Maximieren-Symbol klickt und minimiert sich, wenn man auf das minimieren-Symbol klickt. Das kann man kontrollieren, in dem wir die Methode setResizable() aufrufen. Soll das Fenster eine Maximierungs- oder minimierungs-Funktion haben, in dem wir eine Bestimmte Größe haben, muss die Methode setResizable(true) aufgerufen werden. Soll aber das alles dem Benutzer verbieten werden, so muss die Methode als setResizable(false) aufgerufen werden. 

Damit ihr es nachvollziehen könnt und ein Programm zum üben oder tüfteln habt, gibt es Unten ein Beispiel welches ich als Quelldatei auf GitHub >>HIER<< hochgeladen habe.
 









Kommentare

Beliebte Posts aus diesem Blog

How can I transform a .jar file to a .bat file?

Ein Kleines Spiel mit Altersabfrage

Zufallszahlen und Verzweigungen in Python