Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter

Kelsjb7

Mitglied
Hi, was ist die Aufgabe vom Listener und vom Event?

Also ich weiß, wie ich das verwende, was ich mich halt frage ist, warum hat man das getrennt? Also welchen Sinn hat das?

Was ist die Aufgabe vom Listener? Das Event führt ja Sachen aus, so weit ich weiß und ich auch nutze und im Listener gibt es halt die Methode.

Aber was genau ist der Listener, also für was ist der da?

Und was sind Adapter-Klassen? Welchen Zweck haben die, habe 0 gecheckt im Inet.

Und was ich mich auch frage ist, was tut getsource?
Wenn man getsourc beim Event nutzt, kann man das anscheinend casten wie man will, was tut dann getsource überhaupt, wenn ich danach casten darf wie ich will?

Danke für die Hilfe
 
Beste Antwort
K
Man versucht immer, Klassen so unabhängig wie möglich zu halten.

Und mit Hilfe von Abstraktionen kann man hier einiges an Unabhängigkeit erreichen.
Dies erreicht man z.B. über Interfaces. Dir ist egal, was für ein Auto du fährst - es muss aber das Interface AutoMitSchaltgetriebe haben.

Dieser erste Schritt Klassen unabhängig zu machen, reicht aber leider nicht ganz. Das ist super, denn eine Instanz fest auf eine andere zugreifen will. Aber nun kann es sein, dass es weitere Klassen gibt, die noch gar nicht bekannt sind. Wenn das Auto einen Unfall hat, dann soll irgend etwas automatisch passieren. Was genau weiss man aber nicht, wenn man das Auto baut. Das weisst auch Du nicht, der das Auto später baut. Also baut man das einfach als...

httpdigest

Top Contributor
Ein Event "führt" nichts aus. Das Event ist einfach nur ein Objekt, welches ein Ereignis repräsentiert (z.B. ein Mouse-Button-Click auf einer UI - mit entsprechenden Informationen wie der Koordinate).
Einem oder mehreren registrierten Listenern wird dann von demjenigen, der das Event/Ereignis produziert, das Event übergeben, indem dieser jemand auf dem Listener die entsprechende Methode aufruft.
Der Listener ist also eine Implementierung eines Interfaces, die _du_ baust, um dem Produzenten eines Events mitzugeben, was er bitte aufrufen soll, damit _du_ auf das Ereignis _reagieren_ kannst.
Das Ereignis selbst tut nichts. Deine Listener-Implementierung tut was.
Die Adapter-Klassen (also z.B. die aus Swing) sind nur Klassen, die ein Listener-Interface leer implementieren, also bei jeder Methode _nichts_ tun, damit du im Zweifel nicht 10 Methoden des Interfaces implementieren musst, wenn du nur eine davon brauchst - du kannst also stattdessen vom Adapter ableiten und nur eine Methode überschreiben.
Die Methode getSource() auf einem Ereignis gibt die im Falle von z.B. Java Swing das UI Element, welches das Ereignis ausgelöst hat, also z.B. den JButton, auf den geklickt wurde.
 
K

kneitzel

Gast
Man versucht immer, Klassen so unabhängig wie möglich zu halten.

Und mit Hilfe von Abstraktionen kann man hier einiges an Unabhängigkeit erreichen.
Dies erreicht man z.B. über Interfaces. Dir ist egal, was für ein Auto du fährst - es muss aber das Interface AutoMitSchaltgetriebe haben.

Dieser erste Schritt Klassen unabhängig zu machen, reicht aber leider nicht ganz. Das ist super, denn eine Instanz fest auf eine andere zugreifen will. Aber nun kann es sein, dass es weitere Klassen gibt, die noch gar nicht bekannt sind. Wenn das Auto einen Unfall hat, dann soll irgend etwas automatisch passieren. Was genau weiss man aber nicht, wenn man das Auto baut. Das weisst auch Du nicht, der das Auto später baut. Also baut man das einfach als eine universelle Sache ein. Man schafft ein Interface, das für die Benachrichtigung da ist. Und dann darf sich jeder, der an dem Ereignis interessiert ist, anmelden um dann über das Ereignis informiert zu werden.

Nichts anderes ist das mit den Events. Ein Event ist einfach ein Ereignis. In einer Oberfläche kann es sein; Der Anwender hat auf etwas geklickt, hat eine Taste gedrückt oder oder oder ....
Das nennt sich dann Event. Event ist also ein Ereignis.

Ein Listener ist jemand, der dann dem Event interessiert ist. Dieser muss in der Regel ein bestimmtes Interface erfüllen. Halt das Interface, das notwendig ist, um das Event entgegen zu nehmen.

In dem Aufruf gibt es dann natürlich notwendige Daten. Auto baut Unfall -> Da sind dann Daten wichtig, z.B. genaue Koordinaten, welches Auto es war u.s.w. Diese Informationen sind bei jedem Event durchaus unterschiedlich. In einer UI hat ein Event aber einen Ursprung (source). Und diesen Ursprung kann man abfragen. Das kann aber vom Prinzip (fast) alles sein, daher kann hier nur ein universeller Typ genommen werden. Das kann z.B. Object sein. Damit Du mit der Referenz etwas anfangen kannst, musst du natürlich in den eigentlichen Typ zurück gehen. Du machst also ein Cast ist das, was der Ursprung war. Das funktioniert aber natürlich nur, wenn das auch stimmt. Wenn der Ursprung des Events ein MenuItem war und Du willst es nach Button casten: Das geht nicht. Dann bekommst Du eine ClassCastException.
Klar - wenn Ursprung ein Auto ist und Du willst es als Fahrrad nutzen: Das geht nicht.

Bezüglich Adapterklassen ist der Kontext nicht unwichtig. Ich kenne Adapterklassen eigentlich als Klassen, die andere Instanzen umwandeln. Du hast also einen Adapter um Transferobjekte entgegen zu nehmen und deine eigenen Entities auszugeben und umgekehrt.

Aber https://javabeginners.de/Klassen_und_Interfaces/Adapterklassen.php beschreibt auch eine andere Art von Adapterklasse, die ich irgendwie sehr kritisch sehe. Evtl. meinst Du dies. Da geht es um Interfaces mit mehreren Methoden und dann abstrakten Klassen, die das Interface implementieren und die dann statt Interface verwendet werden können. Diese Klassen haben eine leere Methode für jede vom Interface angeforderte Methode und sollen dazu dienen, dass man nicht alle Methoden implementieren muss.
Warum sehe ich das kritisch: Es ist sehr wichtig, sauberen, wartbaren Code zu schreiben, so genannten Clean Code. Und es gibt in dem Bereich sehr viele Überlegungen. Stark duchgesetzt hat sich u.a. "Uncle Bob" (Robert C.Martin - Autor diverers Bücher, hat gute Videos auf Youtube!) der massgeblich an den SOLID Principles beteiligt war. Und ein Principle ist "Interface segregation". Interfaces sollten so klein sein, dass eben diese Notwendigkeit nicht mehr bestehen kann!

Du hast ein Interface I mit den Methoden a und b. Das setzt voraus, dass die Methoden a und b so zusammen hängen, dass diese nicht einzeln Sinn ergeben. Wenn es Sinn machen kann, a und b zu Trennen, dann macht es auch Sinn, das Interface aufzutrennen. Dann hast Du Ia mit a und Ib mit b.

Beispiel:
Eine Ente kann quaken und schwimmen. Jetzt hast Du etwas, das kann nur Schwimmen. Dann ist es aber ggf. keine Ente ... Also macht man lieber zwei Interfaces KannQuaken und KannSchwimmen.
 
Beste Antwort
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was genau ist skalieren bei 2dGraphics? AWT, Swing, JavaFX & SWT 4
U Was genau bewirkt Rectangle in 2dGraphics? AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
U Was genau ist der basicstroke (2dGraphics)? AWT, Swing, JavaFX & SWT 4
U Was genau ist ein Shape-Objekt? AWT, Swing, JavaFX & SWT 3
U Wie genau funktioniert 2dgraphics, in diesem Bezug? AWT, Swing, JavaFX & SWT 4
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
H Float in jTable auf genau 2 Nachkommastellen AWT, Swing, JavaFX & SWT 3
I Wann genau startet der AWT-Thread? AWT, Swing, JavaFX & SWT 3
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
F Was GENAU ist RCP? AWT, Swing, JavaFX & SWT 13
L JProgressbar möglichst genau AWT, Swing, JavaFX & SWT 3
C Was genau macht getValueIsAdjusting() ? AWT, Swing, JavaFX & SWT 4
I ToolTipText genau positionieren AWT, Swing, JavaFX & SWT 2
MiMa Reaktion auf einen SplitScreenTrenner? AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
P Wie lese ich einen jRadioButton aus? AWT, Swing, JavaFX & SWT 21
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
S Swing GANZE Row auf einen Schlag einfärben AWT, Swing, JavaFX & SWT 2
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
L Wie realisiere ich einen Controller AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
F JavaFX Erstelle einen Wald AWT, Swing, JavaFX & SWT 6
Thallius Swing Aufgabe für einen der gerne Tüftelt. AWT, Swing, JavaFX & SWT 4
M JavaFX Wie füge ich zu einer WebEngine einen Flash Player hinzu AWT, Swing, JavaFX & SWT 3
G AWT Wie bekomme ich einen zeitgesteuerten robot hin? AWT, Swing, JavaFX & SWT 6
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
M Swing Mit Java in der GUI einen Belegungsplan einfügen AWT, Swing, JavaFX & SWT 23
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
H Swing Hintergrundbild in einen JFrame einfügen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3
P Swing RadioButtons - nur einen auswählen AWT, Swing, JavaFX & SWT 3
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
J JFrame in einen JFrame anzeigen AWT, Swing, JavaFX & SWT 2
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
T Einen Kreis anzeigen AWT, Swing, JavaFX & SWT 14
M SWT /Jface Wann einen ColumnLabelProvider benutzen? AWT, Swing, JavaFX & SWT 2
-horn- WorldWindJava+JOGL soll einen animierten Graphen anzeigen, wie? AWT, Swing, JavaFX & SWT 4
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Alles auf einen Panel Zeichnen AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Neue Farbe für einen Teilbereich einer Linie? AWT, Swing, JavaFX & SWT 8
M 3D-Grafik verschiedene Texturen auf einen Würfel mappen AWT, Swing, JavaFX & SWT 15
VfL_Freak Swing kann ich einen laufenden Timer mitten in der Ausführung abbrechen? AWT, Swing, JavaFX & SWT 6
P Swing JTabbedPane mit JButton einen anderen Tab anzeigen AWT, Swing, JavaFX & SWT 9
G Mit Java einen Button wie z.B. im Opera 10.63 erzeugen AWT, Swing, JavaFX & SWT 3
F Swing Beenden eines ActionListener über einen Button AWT, Swing, JavaFX & SWT 8
M Jframe wie bekommt man bei den zeile einen header erzeugen AWT, Swing, JavaFX & SWT 2
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
K LookAndFeel LookAndFeel nur für einen Frame? AWT, Swing, JavaFX & SWT 6
J Swing Kalender soll auf Buttondruck einen Monat weiterblättern AWT, Swing, JavaFX & SWT 7
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
B LookAndFeel für einen Komponenten AWT, Swing, JavaFX & SWT 2
T Ordner öffnen nach Klick auf einen Button AWT, Swing, JavaFX & SWT 3
C AWT Oval nur für einen bestimmten Schritt zeichnen AWT, Swing, JavaFX & SWT 5
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
T Swing Wie kann ich einen String in ein TreePath umwandeln? AWT, Swing, JavaFX & SWT 5
B Restart-Funktion für einen Updatemechanismus?????? AWT, Swing, JavaFX & SWT 4
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
E Swing Zugriff auf Attribute eines JFrames über einen JDialog AWT, Swing, JavaFX & SWT 2
S Swing JTree in ScrollPane einen ToolTip geben AWT, Swing, JavaFX & SWT 2
C Einen JDialog aus einem JDialog aufrufen AWT, Swing, JavaFX & SWT 3
MQue gelbes Warndreieck um einen JFrame AWT, Swing, JavaFX & SWT 6
S Objektverhalten in einen Thread legen AWT, Swing, JavaFX & SWT 4
F Einen einfachen JTree anhand eines Arrays aufbauen AWT, Swing, JavaFX & SWT 9
J Einen JSlider ähnlich wie in OO3 AWT, Swing, JavaFX & SWT 5
G Wie lasse ich einen Graphen zeichnen(mit einer ArrayList)? AWT, Swing, JavaFX & SWT 5
T 2JLabels in einen JTable Header AWT, Swing, JavaFX & SWT 2
R Ich suche einen sehr simplen. AWT, Swing, JavaFX & SWT 2
G Date in einen String umwandeln AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben