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

Eventquellen feststellen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Da es viel zu aufwändig wäre, für absolut jedes Ereignis einen eigenen Event-Listener aufzusetzen, sammelt man diese in einem Aufruf. Von dort macht man dann die Quelle mit Hilfe des Event-Objektes ausfindig.
12:09

Transkript

Sie haben bisher gelernt, wie Sie innerhalb von kleinen Applikationen Listener aufsetzen und diese mit Komponenten verbinden. Mit diesem Wissen können Sie jetzt natürlich alle möglichen Programme bearbeiten. Ich möchte Ihnen in dieser Lektion einen etwas effektiveren Weg zeigen, mit Listenern umzugehen. Hierzu habe ich Ihnen eine kleine graphische AWT Oberfläche mitgebracht. Diese sollten Sie mit Ihrem AWT Wissen mittlerweile auch relativ schnell aufgesetzt bekommen. Sie sehen hier einen Labeltext und hier unten drunter drei Knöpfe. Diese sitzen übrigens in einem eigenen Panel. Damit diese hier schön im Flow-Layout sitzen können. Und das Ganze, also mein Frame an sich, ist in einem Gridlayout mit zwei Zeilen. Was ich nun gerne erreichen möchte, ist, dass je nachdem, welchen Knopf ich drücke, der Text oben sich ändert. Mit Ihrem Wissen könnten Sie jetzt natürlich hingehen, drei Listener Klassen implementieren und auf jeden Knopf eine hängen. Entsprechend wird dann, je nachdem, welchen Knopf Sie drücken, die entsprechende Listener Klasse und die darin enthaltene Methode aufgerufen. Bis dahin kein Problem. Da das aber jetzt schon relativ nervig wäre, dass für drei Knöpfe zu machen und später Sie ganze Menüs haben, wollen wir doch einen etwas effektiveren Weg kennenlernen. Hierzu müssen wir feststellen, aus welcher Quelle ein Event kommt. Im ersten Schritt machen wir das, was wir vorher auch gemacht haben, wir definieren einen Eventlistener. Das machen wir wieder als innere Klasse. Das heißt wir achten darauf, dass wir nicht noch hier innerhalb des Konstruktors sitzen, sonst klappt das Ganze nicht. Sondern wir setzen es hier raus, nehmen uns eine eigene Klasse vor, nennen wir die einfach mal mainListener, und diesmal nehmen wir wieder das Interface, das hat einfach den Grund, dass es für Actionlistener, der reicht völlig für Knöpfe, nur eine einzige Methode gibt. Daher ist dann eine Adapterklasse an der Stelle dann auch wirklich unsinnig. Denn eine Methode müssen wir sowieso implementieren. Okay, also wir nehmen uns einen Actionlistener und implementieren die passende Methode dazu. Falls Sie sich unsicher sind, wie diese Methode heißt, einfach die auf Fehlermeldung gehen. Aha ich sehe gerade, wir haben über Import noch überhaupt nicht die Events eingehängt, also Jawa.awt. Event, nehmen wir das Paket als Ganzes, und jetzt sollte hier unten zwar ein Fehler noch da sein, aber jetzt sollte Actionlistener auch bekannt sein. Wenn wir jetzt hier drauf sehen, sehen Sie: aha, wir brauchen die Methode actionperformed mit dem Übergabeparameter Actionevent. Okay, das kannst du haben, testen wir sie auf Public, geht nicht zurück, also void actionperformed und dann kommt ein Actionevent an und für unser Kapitel ist es sehr wichtig, dass wir uns merken, wie dieses Actionevent, was übergebend wird, auch heißt. Wir lassen es einfach bei E, das ist eine gute Konvention. Okay, jetzt können wir hier anfangen unsere Methode zu implementieren, wir wollen das Label ändern. Und dank dessen, dass wir die Referenzen auf die Komponenten als Instanzvariablen in der Klasse bereits deklariert haben, kommen wir auch direkt drauf und können jetzt mit settext den Inhalt des Labels erstmal auf "Gedrückt" ändern. Wenn Sie hier an dieser Stelle die Fehlermeldung kriegen, dass mein Label unbekannt ist, dann sollten Sie hier einfach schauen, dass Sie auf jeden Fall hier innerhalb der Klasse MoreEvents hier oben die Deklaration gemacht haben. Ansonsten stirbt die Referenzvariable nachdem der Konstruktor abgearbeitet ist, und sie werden von hier unten niemals darauf kommt. Okay, soweit wären wir. Unser Eventlistener sollte soweit OK sein. Jetzt sollen wir natürlich diesen mit registrieren und der muss natürlich jetzt auf jeden der drei Knöpfe registriert werden. Ganz klar, weil jeder der drei Knöpfe könnte ja jetzt unser Ereignis auslösen. Dann haben wir natürlich das Problem, dass natürlich immer der Gleiche aufgerufen wird. Und darum kümmern wir uns gleich. Wir gehen jetzt einfach mal in die Knöpfe und hängen entsprechend, wir können das jetzt hier für jeden einzelnen Knopf machen, aber ich denke es wirkt schöner, wenn wir das hier unten einfach gemeinsam machen würden. Und dann hängen wir einfach mal unseren Listener an. Das ist ein ActionListener, daher addActionListener und instanziieren eine Instanz von meinListener. Bis dahin ja nichts Neues. Okay, und das Gleiche müssen wir jetzt auch noch für die anderen Buttons machen. Wie gesagt, Ihre erste Lösung wäre vielleicht gewesen, dass Sie statt nur einem meinListener dann meinListener Button 1, meinListener Button 2 meinListener Button 3 genannt hätten und daher dann entsprechend auch drei Behandlungsmethoden hätten. Hier werden wir jetzt, wie gesagt, hier immer den gleichen Listener anhängen. Okay, damit hängen Sie an und wir sollten das Ganze einmal testen können. Egal welchen Knopf ich jetzt am Anfang drücke, schauen wir und das Ganze einfach nochmal an, es kommt jetzt immer die Meldung "gedrückt". Grundsätzlich haben wir jetzt auf jedem Knopf das gleiche "or" liegen und daher kommt es natürlich auch beim gleichen "or" entsprechend an. Jetzt möchten Sie natürlich für jeden Knopf eine eigene Behandlung haben. Und dafür müssen wir festellen, von welchem Knopf aus unser Event geworfen wurde. Und das werden wir jetzt im nächsten Schritt machen. Bei diesem Schritt hilft uns nämlich dieses übergebene ActionEvent weiter. Wir haben uns bis jetzt immer gewundert, dass hier ja ein Objekt übergeben wurde. Hier in unserem Fall ist das ein ActionEvent, bei dem Schließen vom Fenster war es ein WindowEvent und so weiter und so fort. Wir haben das abfällig einfach nur mal mit "e" benannt und jetzt genau in diesem Zusammenhang wird das für uns wichtig, denn in diesem Event, und ein Event ist nichts anderes als ein Objekt, eine Klasse, können wir herausfinden, woher es kommt. Wir machen jetzt einfach mal Folgendes: Wir schreiben mal in das Label hinein, wo vorhin noch "gedrückt" stand, nehmen wir uns jetzt einfach mal da unser Objekt "e" und wenn wir hier den Punkt setzen sehen Sie die ganzen Methoden, die das mitbringt. Und da verwenden wir mal die Methode getActionCommand und dann kommt da ein String zurück und den lassen wir uns einfach mal im Label anzeigen. Okay, speichern wir das und lassen das mal laufen. Wenn ich jetzt hier drücke, sehen Sie schon was, passiert. Ich bekomme Knopf eins, zwei, drei, je nachdem, wo ich hinklicke. Was ist das nun? Eigentlich müsste ich Sie suchen lassen. Ich müsste Sie suchen lassen in der Dokumentation, aber da ich weiß, dass ich Sie schon sehr oft in die Dokumentation gejagt habe, zeige ich es Ihnen einfach. ActionCommand gibt mir das zurück, was die Komponente auszeichnet. Bei dem Knopf ist es zum Beispiel die Beschriftung und anhand dieser Beschriftung können wir dann natürlich auch logischerweise feststellen, wer der Verursacher des Events war. Jetzt müssen wir einfach gar nicht mehr groß hier überlegen. Wir müssen jetzt einfach unser Grundlagenwissen anwenden. Wir haben jetzt einfach drei Möglichkeiten und wir können über eine if Abfrage, getActionCommand abfragen, ob es jetzt die Beschriftung von Button 1 ist. Woher bekommen wir die? natürlich von Button eins selbst, wir können die auch fest hinschreiben, aber sobald ich Beschriftungen ändere, ist es Essig. Daher nehme ich einfach Button 1 und nutze jetzt eine get-Methode, und zwar getLabel und damit habe ich die Beschriftung des Buttons 1. Achten Sie darauf, dass hier der Vergleichsoperator hinkommt, kein =, sondern ==. Sonst weisen Sie zu, das wäre natürlich nicht unbedingt Sinn der Sache. Dann können wir uns unten den Part einfach nehmen, da einsetzen, meinLabel.setText, die einfach ausgeben, Knopf 1 wurde gedrückt. Weil das Ganze so schön war, kopieren wir das. Testen auch mal auf Knopf zwei, geben natürlich nun noch passenden Text für Knopf zwei aus und testen auch auf Knopf drei und geben den passenden Text für Knopf drei aus. Das Ganze sieht dann so aus über das ActionEvent mit dem schönen Namen E. Lesen wir aus, was diese Komponente auszeichnen. In unserem Fall ist es das Label eines Knopfes und vergleichen das mit dem Label von Knopf eins, und gegebenenfalls setzen wir dann den Text von unserem Label, also von unserem Ergebnisfeld auf diesen Text, oder bei Button 2 und Button 3 geht das genauso. Wenn wir das Ganze jetzt abspielen lassen, Sehen Sie jetzt unsere passende neue Meldung. So haben Sie also jetzt gelernt, wie Sie mit Hilfe des übergebenen Events, oder besser gesagt des Event-Objektes herausfinden können, woher das Ganze kommt. Und damit reicht es auch, einen einzigen Listener zu implementieren, anstatt für jedes einzelne. Natürlich müssen Sie sich überlegen, dass ein ActionListener nicht für alle Dinge geeignet ist. Ich würde zum Beispiel jetzt das Fenster schließen, dann müssen wir unbedingt natürlich abfragen, ob wir WindowClosing haben und nicht unbedingt, ob eine Aktion ausgelöst wurde. Aber für viele Dinge, wie jetzt hier die Buttons, bringt das doch eine enorme Arbeitserleichterung.

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!