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

Der erste ActionListener

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wir fangen unser erstes Event mit Hilfe eines ActionListeners ab und reagieren darauf. Hierbei müssen Interfaces implementiert werden.
17:01

Transkript

Jetzt sind Sie mit Sicherheit schon gespannt, wie wir unsere ersten Events abfangen können. Hierzu habe ich ein sehr einfaches Beispiel vorbereitet. Ich lasse das einfach mal laufen, damit Sie das sehen. Schreiben Sie mit dem Wissen, das Sie bereits über AWT haben, eine super komplizierte Application, wir haben ganze zwei Komponenten, einmal hier ein Label – ist die Beschriftung „Drücke den Knopf“, und hier unten einen passenden Button. Das Ganze sieht dann so aus, ich habe hier die Klasse AWT_Event vom Frame abgeleitet und im Constructor instanziere ich ein Label und einen Button, und benutze auch das BorderLayout und richte einfach das Label NORTH aus und den Button SOUTH. Das war es, das Ganze lassen wir noch anzeigen. Jetzt wollen wir uns darum kümmern, dass der Knopf eine Handlung bekommt. So möchten wir, dass sobald ich den Knöpf drücke, sich oben der Labeltext entsprechend ändert. Hierzu müssen wir dem Knopf, wir denken jetzt an das Schema über das Eventhandling, einen Listener zuordnen. So einen Listener, den finden wir im Packet „java.awt.event“. Dort finden wir alles, was mit Events zu tun hat. Und da wir jetzt an diesen Klassen arbeiten, importieren wir im ersten Schritt das passende Packet. Es könnte sein, dass wir ein Paar mehr Sachen brauchen, oops, wir wollen das Paketevent kleingeschrieben haben. Das ist also der erste Schritt. Im zweiten Schritt brauchen wir jetzt einen so genannten Eventlistener. Ein Eventlistener selbst ist eine ganz normale Klasse. Eine leere Klasse, die Sie selbst erzeugen können. In dieser Klasse müssen gewisse Methoden implementiert werden. Und wenn Sie das schon hören, dann müssen Methoden implementiert werden, In Grundlagenkapiteln haben wir Interfaces vorgestellt. Und gerade jetzt hier bei den Events kommt andauernd Interfaces vor. Wenn Sie sich also unsicher sind, was ist Interface, schauen Sie sich einfach Grundlagenkapitel zum Thema Interface noch einmal an. Wir brauchen also eine leere Klasse, die ein Interface implementiert. Hierzu gibt es eine ganze Reihe von Interfaces, die Sie verwenden können. Jetzt sind Sie bestimmt schon gespannt, wie Sie Ihren ersten Eventlistener schreiben können. Hierzu habe ich eine kleine Application vorbereitet. Sie ist wirklich sehr einfach gehalten und mit dem Wissen, was Sie in AWT-Kapiteln gelernt haben, wäre es auch für Sie überhaupt kein Problem mehr sein. Lassen wir das Ganze einfach mal laufen. Sie sehen, wir haben ein Frame, mit einem Label hier oben und einem Button hier unten. Ich habe direkt das BoarderLayout verwendet, hier nach NORTH das Label gesetzt und nach SOUTH einfach den Knopf. Das, was wir in diesem Projekt vorhaben ist, dass wenn wir hier auf den Button drücken, entsprechend hier oben der Text ausgetauscht wird. Hierfür brauchen wir Eventhandling. D.h. wenn wir an die Begriffe denken, die wir im Grundlagenteil über Eventhandling jetzt gelernt haben, der Sender oder die Quelle wird hier der Knopf sein und wenn wir über einen Listener das Event, was hier auftritt, die Aktion oder das Klicken aufgefangen haben, müssen wir mit irgendeiner Funktionalität, mit einer Methode das Label hier oben austauschen. Das Ganze ist gar nicht so schwer, schauen wir uns das Ganze entsprechend mal an. Das Erste, was wir natürlich brauchen, ist einen so genannten Eventlistener. Wir denken an das Ohr, und woher bekommen wir das? Natürlich aus einem passenden Packet. Das passte Paket hierzu heißt „java.awt.event“. Und das Importieren wir direkt, damit wir die entsprechenden Klassen direkt vorliegen haben. Mit Stern importieren wir direkt alle, das kann nicht schaden. Im nächsten Schritt müssen wir einen Eventlistener erzeugen. Wie macht man das? Ein Eventlistener ist vom Prinzip her ist nichts Anderes, als eine leere Klasse. Diese Klasse hier doch implementiert ein Interface. Wenn Sie sich jetzt fragen, was meint er mit Interfaces oder Schnittstellen, haben wir im Grundlagenteil behandelt und vielleicht wenn Sie sich unsicher sind, schauen Sic sich einfach nochmal an. Damals hatte ich ein Problem – wie erkläre ich Ihnen, für was man Interface braucht. Ich habe gesagt, wir zwingen den Programmierer beim Implementieren einer Klasse, dass gewisse Methoden auf jeden Fall implementiert werden. Und genau das ist eine Anwendung. Wenn wir einen Listener für bestimmte Ereignisse machen wollen, dann müssen wir gewisse Methoden implementieren. Und genau deshalb nutzen wir an dieser Stelle Interfaces. Wir brauchen also eine Klasse, die ein Interface implementiert. Was für ein Interface brauchen wir dann. Java bietet uns verschiedene Listener-Interfaces an. Ein sehr einfaches, nennt sich ActionListener, das wird immer verwendet, wenn irgendeine Action auftritt. Bei dem Knopf reich das, wenn es geklickt wird. Viel mehr kann man mit einem Knopf nicht tun. Es gibt aber auch kompliziertere, z.B. Fenster, den so genannten FocusListener, KeyListener, WindowListener, MausListener und andere. Woher wissen wir das? Aus der Dokumentation! Schauen wir uns diese Listener einfach mal an. Sie gehören zum AWT. Scrollen wir etwas runter. Und Sie sehen jetzt hier bei API References java.awt.event. Da wollen wir hin. Und als aller Oberstes sehen wir den ActionListener. Hier haben Sie die ganzen anderen Listener. Je nach dem, was für eine Anwendung Sie haben, brauchen Sie nur noch den passenden Listener. Wie gesagt, am Anfang benutzen wir nur den ActionListener. Das Ganze ist ein Interface, das wissen wir schon, und Sie sehen die einzige Methode, die darin deklariert worden ist, die nennt sich „actionPerformed“. Übergibt noch so ein seltsames Ding Names ActionEvent, aber das war es. Und daher sind wir dann auch relativ schnell fertig. Jetzt kommt noch die Frage, wohin legen wir jetzt unsere Klasse „ActionLestener“? Und ich lege diese in meine Klasse AWT als innere Klasse hinein. Achten Sie darauf, dass sie nicht in dem Konstruktor stehen, hier ist also die schließende Klammer für den Konstruktor, sondern außerhalb. Als nächsten Schritt müssen wir jetzt unseren Listener implementieren. D.h. wir sagen „class“ – ist ja eine eigene Klasse, nennen wir die einfach „meinListener“. Und jetzt implementieren wir ein Interface, eine Schnittstelle, daher „implements“ „ActionListener“. Dann kommen die geschweiften Klammern, denn jetzt kommt unsere eigene Klasse. Das schöne ist, wir bekommen hier direkt eine Fehlermeldung, am besten lesen wir sie mal. Steht: „Hier hör zu, du implementierst Interface ActionListener und du musst jetzt eine Methode actionPerformed mit dem Übergabeparameter an ActionEvent implementieren“. Das ist das schöne an diesen Schnittstellen oder Interfaces, dass ich jetzt als Programmierer wirklich gezwungen bin, diese Klasse genauso zu implementieren, wie es sich der Programmierer des Interfaces sich das gedacht hat. Wie gesagt, wenn das alles noch etwas unsicher ist, noch einmal das Kapitel zu den Schnittstellen sich anschauen, diese werden Sie andauernd brauchen. Im nächsten Schritt lege ich diese geforderte Methode an, mit public void, weil nichts zurückkommt, actionPerformed, und wir haben gesehen es kommt ein ActionEvent rüber und in den meisten Fällen wird es mit „e“ benannt (Event), Sie können aber hier diesen Übergabeparameter nennen, wie Sie wollen. Er ist vom Typ „ActionEvent“. Später können wir diesen sogar ganz gut brauchen, wie Sie gesehen haben. Ok, jetzt müssen wir diese Methode reinschreiben, was wir gerne tun wollen. Das war es schon. An dieser Stelle können Sie jetzt Ihre Funktionalität schreiben. Denn hier warten Sie dann, wenn jemand auf den Knopf drückt. Ok, ich könnte schon versuchen, das Label zu ändern, wird noch nicht ganz gehen, daher ein Zwischenschritt… Wir lassen auf der Konsole einfach was ausgeben. „Ich soll was tun!“ Ok, scheint zu stimmen. So weit so gut. Wir sind jetzt fertig und wenn wir jetzt das Ganze laufen lassen, dann werden Sie bemerken, das tut sich immer noch nichts. Warum? Ganz einfach, Sie haben ein Ohr geschrieben, das ist unser Ohr aus dem Grundlagenteil – das ist unser Listener. Was wir noch nicht gemacht haben, ist diesen Listener bei einer Quelle registriert. D.h. unser Ohr könnte jetzt hören, aber wir müssen sagen worauf, also auf welche Komponente das Ohr liegen soll, damit er die Ereignisse annimmt. Und hierfür müssen wir dann hier oben in dem Construktor, Sie können das natürlich auch an einer anderen Stelle, z.B. im Hauptprogramm oder so machen, aber da oben ist es noch am günstigsten, dann vergißt man es nicht. Wer ist denn die Quelle für unsere Action. Natürlich der Button. Deshalb müssen wir an dem Button ran. Vielleicht mal hier in eigenem Block, damit man es schöner sieht. Und da hängen wir jetzt an unserem Button das Ohr an. Dafür gibt es eine eigene Methode bei Komponenten, sie heißt „addActionListener“, je nach dem, was man für einen Listener verwendet hat, wir haben halt einen ActionListener geschrieben. Je nach dem, wie gesagt, müssen Sie die passende Methode nehmen. Nehmen wir jetzt den ActionListener und hängen den an. Wie macht man das? Vom Prinzip her wir haben hier ja eine eigene Klasse geschrieben – meinListener. Eine Klasse muss instanziert werden. Und Sie instanzieren jetzt hier drin einfach Ihre Klasse mit „new meinListener“. Semikolon ans Ende, speichern, voila! Geklappt! Somit haben wir jetzt also an dem Button ran unser Ohr gehängt. Sobald der Button also eine Action hat, wird dieser Listener hier beworfen mit dem Ereignis. Der Listener selber hat dafür eine passende Methode, hier wird hineingesprungen, das Ereignis liegt in „e“ drin, und wir lassen ein Text ausgeben. Das war nicht sehr viel, abspielen, parallel sollten wir uns die Konsole aufmachen. Wir drücken auf den Knopf, und hier …, das sieht man im Moment nicht so gut, in der Konsole „Ich soll was tun!“ D.h. das hat bis jetzt schon geklappt. Wir springen wirklich hier genau in diese Methode hinein. Was wir jetzt natürlich zum Schluß noch ändern wollen, ist natürlich wir wollen kein Konsolentext haben, sondern wir wollen das Label ändern. Ja, jetzt könnten Sie natürlich sagen, es ist ja überhaupt kein Problem. Hierfür gibt es hier schöne Hilfsmittel in Eclipse. Schauen wir doch einfach, wie heißt das Ganze denn. Ja, wir sehen hier überhaupt nicht unsere Elemente. Warum? Hier haben wir Label und Button. Wenn ich aber jetzt versuche, aus meinem Programm raus, das Label hier anzufassen, bekomme ich eine Fehlermeldung. Denn Label ist zurzeit noch unbekannt. Das liegt da dran, dass wir hier oben unser Label innerhalb unseres Konstruktors definiert haben, d.h. innerhalb einer Methode. Und jetzt erinnern wir uns Grundlagen- kapitel „Sichtbarkeit von Variablen“. Dieses Label, oder besser gesagt diese Variable, die die Adresse weiss, wo das Label im Speicher zu finden ist, die lebt nur so lange, bis der Konstruktor abgearbeitet ist. Und dann verschwindet sie. Und daher ist dieses Label überhaupt nicht sichtbar. Daher müssen Sie jetzt beginnen, wenn Sie also von außen zugreifen wollen, müssen Sie diese Variablen, wie Label z.B. oder Button, als Instanzvariablen vorher anlegen. Instanzvariablen liegen innerhalb der Klasse und außerhalb der Methoden, daher gehen wir jetzt hin und sagen „Privat Label label“. Jetzt haben wir unten gleich einen Fehler bekommen, denn dieses Label hier braucht dann nur noch belegt zu werden. Und wir können noch auch den Button direkt noch ober reinlegen, das ist einfach guter Stiel, wenn das einfach hier übersichtlich zu gestalten. Wir werden noch später einen Button haben. Und hier das kann noch weg. Voila! D.h. jetzt, hier legen wir die vorher deklarierten Variablen. Und jetzt sehen wir plötzlich in der Outline, dass es ein Label und einen Button gibt. Es ist eine ganz gute Kontrolle hier rechts, ob wirklich diese Referenzplatzhalter vorhanden sind. Und jetzt kann ich hier unten hingehen, und auf Label gehen, und wenn ich jetzt den Punkt drücke sehen Sie natürlich alle Methoden und und Eigenschaften, die freigegeben sind. Und wohin wollen wir? Wir wollen mit setText die Labelbeschriftung ändern. Schreiben wir einfach mal „Danke“ da rein, speichern das Ganze. Das kann ich zumachen. Und dann testen wir das Ganze. Voila! Ihr Programm funktioniert so weit. Wir können es schließen, das werden Sie noch gleich kennenlernen, wie das funktioniert, aber unser Programm reagiert auf Events! Gehen wir zum Schluß einfach mal durch, was wir alles tun mußten, um Events abzufangen. Der erste Schritt war, logischerweise wir brauchen das Packet mit seinen Klassen, java.awt.event. Zweiter Schritt. Wir müssen einen EventListener uns besorgen. Das passiert damit, dass wir eine eigene Klasse anlegen, und in dieser Klasse einen Listener implementieren. Listener sind Interfaces, und wir können einfach nachschauen, welches Interface uns die passenden Methoden mitbringt. Hier implementieren wir dann die passende Methode, der ActionListener ist ein sehr einfacher, der eine einzige Methode hat. Andere Listener, z.B. der WindowListener, hat viel mehr Methoden. Den werden wir gleich noch kennenlernen. Nachdem Sie diese Methode implementiert haben, ist das Ganze zufrieden. Jetzt haben Sie Ihr Ohr, und das Ohr müssen Sie auf eine Quelle legen, woher die Ereignisse kommen sollen. Das machen Sie, indem Sie über die Methode „add“ und dann den passenden Listenernamen, also ActionListener, oder WindowListener, oder Ähnliches eine neue Instanz Ihrer neu geschriebenen Klasse anhängen. Damit wir dann später aus unserer Methode hier unten auf die Komponenten zugreifen können, sollten diese hier oben als Instanzvariablen vorher deklariert worden sein. Das war es. Viel Spaß mit Ihrem ersten Listener.

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!