Listener Objekte

.maik.

Bekanntes Mitglied
hab gerade mit der Oberflächenprogrammierung angefangen und wunder mich ueber einen punkt. folgendes beispiel: ich habe ein frame und moechte es gerne auf dem button x beenden. der Code ist:
Java:
import java.awt.*; 
import java.awt.event.*;
import javax.swing.*; 
 
class WindowQuitter extends WindowAdapter
{
  public void windowClosing( WindowEvent e )
  {
    System.exit( 0 );  // what to do for this event
  }
} 
          
public class GUItester
{
  public static void main ( String[] args )
  {
    JFrame frm = new JFrame();    // construct a myFrame object

    WindowQuitter wquit             // construct a listener 
        = new WindowQuitter();      // for the frame
    frm.addWindowListener( wquit ); // register the listener

    frm.setSize( 150, 100 );     
    frm.setVisible( true );      
          
  } 
}

wenn ich jetzt das programm starten würde und auf x klicken würde, würde ja ein Objekt vom Java System erzeugt werden, der ein WindowEvent representiert. das wird dann an das listener Objekt weitergegeben. woher weißt das listener objekt denn jetzt, welche methode es auszuführen hat?

edit: ach und eine letzte Frage habe ich noch : es soll ein Graphics Objekt geben, der den Bereich darstellt, worauf gemalt werden kann und dieses Objekt würde von selbst hinzugefügt werden. was mich wundert, da die klasse doch abstrakt ist ? ?



vielen dank
 
Zuletzt bearbeitet:

Michael...

Top Contributor
wenn ich jetzt das programm starten würde und auf x klicken würde, würde ja ein Objekt vom Java System erzeugt werden, der ein WindowEvent representiert. das wird dann an das listener Objekt weitergegeben. woher weißt das listener objekt denn jetzt, welche methode es auszuführen hat?
Was meinst Du mit Objekt vom Java System? Und wer soll ein WindowEvent representieren???

Wenn das Programm gestartet wird, passiert u.a. folgendes:
1. Es wird ein Objekt vom Typ JFrame erzeugt
2. Es wird ein Objekt vom Typ WindowQuitter erzeugt (welches von WindowAdapter erbt, die Klasse WindowAdapter implementiert das Interface WindowListener)
Entscheidend: WindowQuitter überschreib die Methode windowClosing von WindowApdater
3. Das WindowQuitter Objekt wird als WindowListener an dem JFrame Objekt registriert
4. Die Größe des JFrames wird festgelegt
5. Das Fenster wird angezeigt.

Wenn jetzt das Fenster geschlossen wird, passiert ganz grob beschrieben folgendes:
1. JFrame informiert alle registrierten WindowListener darüber, dass das Fenster geschlossen wird
2. Das Objekt vom Typ WindowQuitter ist ein am JFrame registrierter WindowListener, also ruft das JFrame Objekt dessen Methode windowClosing(...) auf (dass dabei noch ein Objekt vom Typ WindowEvent übergeben wird, ist hier irrelevant)
3. Durch den Aufruf der Methode System.exit(...) wird die Java Laufzeitumgebung beendet.

edit: ach und eine letzte Frage habe ich noch : es soll ein Graphics Objekt geben, der den Bereich darstellt, worauf gemalt werden kann und dieses Objekt würde von selbst hinzugefügt werden. was mich wundert, da die klasse doch abstrakt ist ?
Welche Klasse ist abstrakt und was hat das mit einem Graphics Objekt zu tun?
 

.maik.

Bekanntes Mitglied
Ist es denn so, dass ein Graphics Objekt die Fläche eines Frames repräsentiert, auf der gezeichnet werden kann und, dass dieses Objekt automatisch von Java System erzeugt wird ? in der doukemtation steht dass Graphics arbstrakt ist.


edit: wenn das fenster geschlossen wird, dann werden alle listener objekte, die regestriert sind, darüber informiert. aber woher weißt WindowQuitter, dass jetzt die windowClosing Methode aufgerufen werden soll?
 

Michael...

Top Contributor
Ist es denn so, dass ein Graphics Objekt die Fläche eines Frames repräsentiert, auf der gezeichnet werden kann und, dass dieses Objekt automatisch von Java System erzeugt wird ? in der doukemtation steht dass Graphics arbstrakt ist.
Ein Graphics Objekt bietet Methoden an, um auf eine Komponente oder ein Image zu zeichnen. Ja es wird vom "System" erzeugt.

edit: wenn das fenster geschlossen wird, dann werden alle listener objekte, die regestriert sind, darüber informiert. aber woher weißt WindowQuitter, dass jetzt die windowClosing Methode aufgerufen werden soll?
WindowQuitter weiß nicht, dass eine Methode windowClosing aufgerufen werden soll und ruft daher die Methode auf. JFrame besitzt eine Referenz auf ein WindowQuitter Objekt (vgl.
Code:
 frm.addWindowListener( wquit );
) und ruft an diesem die Methode windowClosing auf. Das ist ja der Weg wie das Fenster seine WindowListener über das geschlossen werden informiert - in dem an den Listener Objekt u.a. diese Methode aufgerufen wird (s. mein letzter Post)
 

.maik.

Bekanntes Mitglied
ok das verstehe ich. also ist in JFrame schon geschrieben, dass, wenn der CloseButton gedrückt wurde, eine windowclosing methode aufgerufen werden soll?

wozu wird eig immer ein WindowEvent Objekt erzeugt. brauch man das für irgendwas?
 

Michael...

Top Contributor
ok das verstehe ich. also ist in JFrame schon geschrieben, dass, wenn der CloseButton gedrückt wurde, eine windowclosing methode aufgerufen werden soll?
So in etwa ;-) Wobei es auch keine oder mehr als eine windowClosing Methode sein kann, die aufgerufen werden - abhängig von der Anzahl der registrierten Listener.
Das ganze basiert auf dem Observer Pattern:
Observer (Entwurfsmuster) ? Wikipedia
wozu wird eig immer ein WindowEvent Objekt erzeugt. brauch man das für irgendwas?
Mit solch einem Event Objekt kann das "beobachte" Objekt Informationen an den Listener weitergeben.

Bsp. Ein beliebes Objekt registriert sich als ActionListener an mehreren Buttons. Ein Klick auf einen beliebigen Button ruft die actionPerformed an diesem (Listener) Objekt auf, dabei wird ein Objekt vom Typ ActionEvent übergeben. Will der Listener nun wissen, welcher Button gedrückt wurde (z.B. weil unterschiedlich reagiert werden soll), kann er das Event Objekt nach der "Ereignisquelle" fragen.
 

.maik.

Bekanntes Mitglied
ja. xD du hast gesagt, dass meine aussagen nur in etwa richtig seien deshalb wollte ich wissen, wie das funktioniert, dass das listener objekt weiß, welche methode aufgerufen werden soll?

danke
 

Michael...

Top Contributor
Es hat ja grundsätzlich gepasst.
Nur wird da nicht unbedingt eine windowClosing(...) durch JFrame aufgerufen, sondern alle windowClosing(...) sämtlicher registrierter WindowListener.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Mit Listener AWT Objekte ansprechen Java Basics - Anfänger-Themen 2
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
D String value change listener Java Basics - Anfänger-Themen 2
topi WindowAdapter / Listener / Event Java Basics - Anfänger-Themen 4
L Problem mit Listener Java Basics - Anfänger-Themen 0
P Listener registrieren Java Basics - Anfänger-Themen 40
Salo JTabel Selection listener Bsp. Java Basics - Anfänger-Themen 3
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
M Compiler-Fehler Using action listener Java Basics - Anfänger-Themen 1
F Listener schreiben Java Basics - Anfänger-Themen 1
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
J Listener Java Basics - Anfänger-Themen 4
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
llabusch Kombinationsfeld - LISTENER Java Basics - Anfänger-Themen 0
S Eigenen Listener zu eigenen Button! Java Basics - Anfänger-Themen 5
S Listener reagieren nicht mehr Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
K On Click listener Problem Java Basics - Anfänger-Themen 4
L JTextField/Listener Input Problem Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
G Listener ohne Objekt Java Basics - Anfänger-Themen 5
T Button Text mit Action Listener [Hilfe!] Java Basics - Anfänger-Themen 10
H Eigenen Listener einbauen Java Basics - Anfänger-Themen 5
K Key Listener bei 2 gleichzeitig gedrückten tasten Java Basics - Anfänger-Themen 3
M Bäume und Listener Java Basics - Anfänger-Themen 2
K Erste Schritte table Listener noob frage Java Basics - Anfänger-Themen 3
E eigenständige Listener-Klasse Java Basics - Anfänger-Themen 9
T Motion listener Java Basics - Anfänger-Themen 10
U Listener erstellen Java Basics - Anfänger-Themen 16
N Variablen aus Action Listener lesen und weiterverarbeiten Java Basics - Anfänger-Themen 12
M listener Java Basics - Anfänger-Themen 16
L Listener Problem in Klasse Java Basics - Anfänger-Themen 8
P Listener für mehrere Buttons Java Basics - Anfänger-Themen 3
L Window Listener Java Basics - Anfänger-Themen 2
Kenan89 JTable: Listener Java Basics - Anfänger-Themen 4
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
A action listener Java Basics - Anfänger-Themen 8
M Netbeans Listener - Anonymous, inner class, main class? Java Basics - Anfänger-Themen 4
K Action Listener reagiert nicht auf Button druck mehr??? Java Basics - Anfänger-Themen 4
E Mehrere Listener auf einen Button? Java Basics - Anfänger-Themen 3
P Input/Output InputStream Listener? Java Basics - Anfänger-Themen 7
X Problem bezüglich Key Listener Java Basics - Anfänger-Themen 3
Y Button hört nicht auf Listener Java Basics - Anfänger-Themen 5
H JTable, Listener und CellEditor Java Basics - Anfänger-Themen 8
H Listener und Events entfernen Java Basics - Anfänger-Themen 2
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
S Applet Key Listener Java Basics - Anfänger-Themen 6
J Action Listener Java Basics - Anfänger-Themen 2
G Probleme mit Listener Java Basics - Anfänger-Themen 27
B Wert einer Variable mit Listener ueberwachen Java Basics - Anfänger-Themen 3
F Port Listener Java Basics - Anfänger-Themen 9
J JComboBox Listener Java Basics - Anfänger-Themen 6
J Window-Listener funktionieren nicht Java Basics - Anfänger-Themen 7
N Frage zu Listener für Textfelder Java Basics - Anfänger-Themen 5
Benji0815 Eigenen Listener schreiben Java Basics - Anfänger-Themen 13
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
S Key-Listener richtig "einbauen" Java Basics - Anfänger-Themen 42
S Listener von ausserhalb aufrufen Java Basics - Anfänger-Themen 2
S Action Listener Java Basics - Anfänger-Themen 6
Sweety Listener in Swing Java Basics - Anfänger-Themen 8
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
Developer_X Mouse MOTION listener example Java Basics - Anfänger-Themen 5
J Mouse-Listener Java Basics - Anfänger-Themen 3
I Listener Klassen in Package Java Basics - Anfänger-Themen 3
StickToFreak Applet -> GameLoop + Listener / Listener funktioniert nicht Java Basics - Anfänger-Themen 22
B externer Listener für Zeichenbereich? Java Basics - Anfänger-Themen 2
D dialog listener? Java Basics - Anfänger-Themen 2
G Key Listener arbeitet Fehlerhaft Java Basics - Anfänger-Themen 6
C Listener und Events Java Basics - Anfänger-Themen 10
E Listener Java Basics - Anfänger-Themen 2
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
G jtable listener wenn zeile markiert wird Java Basics - Anfänger-Themen 6
S Action Listener Funktioniert nicht Java Basics - Anfänger-Themen 6
D Kombinationsfeld => Realisierung im Listener? Java Basics - Anfänger-Themen 2
G LIstener bei JavaMail Java Basics - Anfänger-Themen 2
G Context Listener des Apache Tomcat verwenden Java Basics - Anfänger-Themen 4
D Listener bzw. Interfaces Java Basics - Anfänger-Themen 7
A Wo/Wie Event Listener Java Basics - Anfänger-Themen 3
G Window Listener? Java Basics - Anfänger-Themen 2
G 2 Listener wiedersprechen sich. Java Basics - Anfänger-Themen 12
G Listener für JPanel für Statusmeldungen Java Basics - Anfänger-Themen 3
F Listener für Variable Java Basics - Anfänger-Themen 29
A Gibt es standardmässig in Java einen Verzeichnis-Listener? Java Basics - Anfänger-Themen 6
N Listener für datei Java Basics - Anfänger-Themen 13
G listener für radiobutton Java Basics - Anfänger-Themen 1
G Listener Java Basics - Anfänger-Themen 5
G Listener Problem Java Basics - Anfänger-Themen 3
B Wiso funktioniet das nicht? (Listener) Java Basics - Anfänger-Themen 6
H Key Listener macht nicht das was er soll Java Basics - Anfänger-Themen 4
T Wartet Klasse auf Listener? Java Basics - Anfänger-Themen 3
D Listener? Java Basics - Anfänger-Themen 2
S Listener auf JTextfeld Java Basics - Anfänger-Themen 8
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben