Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Jetzt lerne ich Java 6

Aufbau von Swing-Programmen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
In dieser Lektion erfahren Sie alles über den grundlegenden Aufbau eines Swing-Fensters. Lernen Sie die Besonderheiten der unterschiedlichen Panes kennen.
12:47

Transkript

Um sich der Unterschiede zwischen AWT und Swing etwas bewusster zu machen, werden wir in dieser Lektion ein ganz kleines Swingbeispiel schreiben. Diese Swinganwendung sieht ähnlich aus wie das erste Beispiel, das wir beim AWT gemacht haben. Wir haben einfach nur ein ganz einfaches Label und einen Button darunter. Hierbei können wir ganz gut die Unterschiede feststellen. Im ersten Schritt habe ich mir hier ein neues Projekt angelegt, und ich lege ich mir eine eigene Klasse an. Das kennen Sie ja bereits. Nennen wir diese Klasse einfach FirstSwing und lassen diese entsprechend generieren. Bei unseren ersten AWT-Beispiel haben wir von Frame abgeleitet. Ich habe Ihnen da erklärt, dass Frame an sich ein komplettes Fenster mitbringt, mit Titelleiste und Rahmen. Zusätzlich habe ich Ihnen gesagt, dass es im AWT auch ein Window gibt, was einfach ein Fenster jedoch ohne Titel und Rahmen abbildet. Swingkomponenten haben meistens ein [unverständlich] im AWT, oder besser gesagt Sie können einfach mal überlegen oder in der Doku suchen, wie wohl die Komponente heißt, wenn Sie ein großes [unverständlich] davorsetzen. Das heißt, anstatt jetzt abzuleiten aus Frame, leiten wir von JFrame. Das ist das Swing [unverständlich]. Natürlich müssen wir entsprechend unser Paket importieren. Die Pakete für Swing liegen in Javax.swing. Hier liegen also die passenden Klassen und Sie sehen entsprechend, unsere rote Linie verschwindet. Das heißt wir leiten unsere Swingapplikationen von Jframe oder einem der anderen passenden Container ab. Im nächsten Schritt gehen wir wieder an unseren Konstruktor und das, was ich hier tue, ist eigentlich altbekannt. Wir rufen zuerst den Konstruktor der Elternklasse auf und als nächstes setzen wir direkt mit "this" einfach mal einen Titel. Also, an der Stelle nichts Neues. Was jedoch jetzt neu ist, wir möchten gerne einen Layout-Manager verwenden, und zwar das Gridlayout. Und genau an dieser Stelle kommen wir dorthin, dass sich der Punkt bewahrheitet, den ich in der Einführung gesagt habe. auch Swing-Komponenten greifen immer wieder auf das AWT zurück. Das heißt wir müssen tatsächlich, trotz wir eine Swinganwendung schreiben, jetzt hier AWT-Klassen importieren. Warum? Die Layout-Manager von AWT werden weiterhin verwendet. Zusätzlich sind noch einige Swinglayout-Manager dazugekommen. Aber die grundsätzlichen Layout-Manager sind immer noch die gleichen. Und daher müssen wir hier diese Klassen entsprechend importieren. Wären wir jetzt in einer AWT-Anwendung, könnten wir mit "this" und "setLayout" Manager hier das entsprechend zuweisen. Das ist hier jedoch nicht mehr der korrekte Weg Innerhalb von Swing. Innerhalb von Swing gibt es eine Aufteilung unseres Containers oder unseres Fensters. Hierzu habe ich Ihnen ein kleines Slide vorbereitet. Swing-Fenster haben einen etwas komplexeren Aufbau als AWT-Fenster. Dort haben wir ja unsere Komponenten direkt in das Fenster platziert. Sie erinnern sich mit Sicherheit noch an die Methode "add". Hier besteht ein Fenster aus sogenannten Panes, also einzelnen abgeschlossenen Bereichen. Hierbei bildet das Ganze die sogenannte RootPane. Diese RootPane an sich ist aufgeteilt in verschiedene Panes. Zuerst einmal haben wir über dem Ganzen eine sogenannte GlassPane liegen, die genau so groß ist, wie die RootPane. Auf dieser werden jedoch in den meisten Fällen keine visuellen Komponenten abgelegt. Darunter befindet sich die sogenannte LayeredPane. Das ist das, was hier in Gelb dargestellt ist. Auch diese ist natürlich genau so groß, wie die RootPane. Die LayeredPane kann sich in zwei weitere Panes aufteilen, wobei wir einmal eine ContentPane haben, und das ist die Pane, auf der wir jetzt hauptsächlich arbeiten werden, und dort unsere Komponenten hinzufügen. Und, falls wir haben, eine MenuBar, die wir hier oben anfügen können. Somit müssen wir jetzt immer sicherstellen, dass wir, wenn wir zum Beispiel Layouts bestimmen, oder auch Komponenten platzieren, die entsprechende ContentPane unseres Fensters auswählen. Hierfür gibt es eine eigene Methode. Das heißt wir schreiben an dieser Stelle "this.getContentPane", dann kommt der entsprechende Container zurück, auf dem wir arbeiten wollen, und anschließend können wir dann mit einer set-Methode, set.Layout, entsprechend unseren Layout-Manager für genau diesen Container, also für genau diesen Bereich hier setzen. Und darauf werden ja jetzt unsere visuellen Komponenten kommen. Wir verwenden hier das Gridlayout, und wir nehmen uns entsprechend eine Instanz davon, das ist alt und geblieben. Im nächsten werden wir jetzt unsere ersten Swingkomponenten erzeugen, und zwar ein Label. Auch beim Label haben wir einfach wieder den Namen mit dem vorgestellten J. Nennen wir unser Label einfach Label und die Instanzierung geht genauso, wie Sie das auch aus dem AWT kennen, nichts Neues. Platzieren wir das am besten im Center und benutzen daraus einfach die entsprechende Konstante. Voilà. Dann würde sich ein Knopf auch noch ganz gut machen. Also JButton, Button = new JButton. Sie sehen also, hier können Sie Ihr Wissen aus dem AWT einfach anwenden, die Elternklassen heißen einfach nur etwas anders. Nachdem wir unsere Instanzen haben, wollen wir diese natürlich jetzt unserem Container hinzufügen. Und auch hier wieder darauf achten, dass wir nicht vergessen, den passenden ContentPane uns zu rufen, also getContentPane. Die Methode "add" sollte Ihnen noch ein Begriff sein. Wir hängen also ein Label ran und im nächsten Schritt holen wir uns noch einmal die ContentPane und hängen unseren Knopf noch dran. An dieser Stelle einfach so zur Anmerkung: Sie können natürlich das Ganze auch so machen, dass Sie ein Panel sich selbst gestalten zuerst einmal, das nennt sich in Swing JPanel, die Knöpfe und das Label entsprechend auf dieses Panel bringen und dann das Panel einfach als ContentPane verwenden. Das geht auch, dann verwenden Sie passend hier bei "this" die Methode setContentPane und übergeben Ihr Panel einfach. Damit wird eben das Panel als ContentPane verwendet. Gut. So weit, so gut. Wir können jetzt im nächsten Schritt uns das Ganze auch schon mal anzeigen lassen. Dafür brauchen wir natürlich eine Instanz davon in unserem Hauptprogramm. Da ist natürlich nichts anders als bisher. Nutzen wir direkt setSize, damit wir eine Größe vorgeben können, wie groß das Ganze sein soll. Sagen wir 300 x 100. Und weil es so schön ist, möchte ich das Fenster gerne ein bisschen in die Mitte gerückt haben. Gehen wir einfach mit setLocation ran und geben eine Position von 200 x 100 an. Dann sitzen wir nicht ganz links irgendwo in der Ecke und natürlich nicht vergessen, mit setVisible true das Fenster auch sichtbar machen. Gut, lassen wir den Code grade neu schreiben, scheint zu stimmen. Dann lassen wir das Ganze als Java-Applikation laufen und nach unserer harten Arbeit haben wir unsere erste Swing-Applikation. War doch gar nicht so schwer. Was wir als nächstes uns drum kümmern müssen ist mal wieder unser altbekanntes Problem, dass wir natürlich auch die Applikation dann wirklich beenden wollen, wenn wir den Schließen-Knopf drücken. Hierzu mussten wir bei AWT hier ziemliche Klimmzüge machen. Wir mussten einen Window-Adapter ableiten und diesen dann entsprechend einhängen, registrieren. Hier haben sich entsprechend die Java-Entwickler besonnen und gerade solche Events doch etwas einfacher zugänglich gemacht. Und das Schöne an dieser Geschichte ist jetzt, dass Sie in Swing die Möglichkeit haben, das Fenster relativ flott zu schließen. Sie müssen eigentlich nichts anderes tun, als mit this set.DefaultCloseOperation einen gewissen Integer-Wert oder eine Konstante zu übergeben. Das heißt man kann einfach auswählen, was will ich denn standardmäßig, wenn jemand das Fenster schließt, machen. Und da Zahlen lernen recht doof ist, kann man einfach vordefinierte Konstanten benutzen aus JFrame, denn das this bezieht sich ja auf unser JFrame. Die stehen ja im Konstruktor drin. Das heißt wir nutzen hier einfach die vordefinierten Konstanten und wenn Sie hier den Punkt eingeben, sehen Sie schon die ersten Konstanten hier kommen. Es gibt zum Beispiel "do nothing on close", das wäre sehr ärgerlich, aber in gewissen Fällen auch sinnvoll. Und was sich hier super nett anhört ist "exit on close", das heißt, hier wird wirklich System-Exit automatisch für Sie aufgerufen, nachdem übrigens alle anderen Fenster-Events durchgelaufen sind. Das heißt Sie können auch gegebenenfalls noch Dateieinträge schreiben oder Ähnliches, jedenfalls das sollte unser Fenster entsprechend schließen. Lassen wir das Ganze nochmal laufen. Okay, läuft. Im Moment läuft auch noch mein Fenster und wenn ich jetzt schließe, Sie sehen, es ist weg. Es wurde wirklich korrekt geschlossen. Also hier an dieser Stelle super einfach die Fensterschließenoperation einzuhängen. Damit haben Sie Ihren Rundflug durch unser erstes Swing-Programm gemacht und wir werden im Folgenden jetzt einfach einzelne Swingkomponenten vorstellen, die interessant sind und dabei auch einen alten Bekannten wieder treffen, und zwar das Prinzip, der Listener. Der Eventlistener ist aus dem AWT gekommen und ist geblieben. Das heißt, hier ändert sich eigentlich überhaupt nichts, und daher gibt es auch keine eigene Lektion dazu, wie jetzt Events entsprechend jetzt in Swing groß bearbeitet werden, sondern die werden einfach nebenbei während wir jetzt die einzelnen Swingkomponenten vorstellen, entsprechend einfach Events anfangen.

Jetzt lerne ich Java 6

Steigen Sie ein in die Programmierung mit Java 6, lernen Sie die Grundlagen kennen und unternehmen Sie anschließend Ihre ersten Schritte in der objektorientierten Programmierung.

12 Std. 27 min (98 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!