WindowAdapter und ActionAdapter

M

Mr.Nobody

Gast
Naja, der ActionListener besitzt ja nur eine Methode. Deswegen wäre es sinnlos, wenn man einen Adapter dafür erzeugen würde. Adapterklassen sind ja an sich nur dafür da, um sich Schreibarbeit zu sparen. Sie implementieren nämlich alle Funktionen leer und bei einer einzigen Methode lohnt das nicht.
 

L-ectron-X

Gesperrter Benutzer
Ich glaube du möchtest deinen ActionListener so implementieren:
Java:
myButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
      //do something
   }
});

Du erzeugst damit eine anonyme innere Klasse, die ähnlich wie ein Adapter eingebunden werden kann.
 

paule7

Mitglied
Warum gibt es dann überhaupt WindowListener wenn es WindowAdapter gibt? Für was steht das @Override und ist es überhaupt wichtig?
 
S

SlaterB

Gast
es gibt nur Einfachvererbung,
wer z.B. von JFrame erbt, auch wenn das eine zweifelhafte Entscheidung ist, und gleichzeitig die WindowListener-Funktionalität implementieren will, kommt mit WindowAdapter nicht weiter,
 

L-ectron-X

Gesperrter Benutzer
@Override ist eine Annotation, die dem Compiler anzeigt, dass der Programmierer eine Methode aus einer Basisklasse überschreiben möchte. Der Compiler prüft daraufhin, ob wirklich die Konventionen der Methode eingehalten wurden.
Gibt es eine Abweichung, gibt der Compiler eine Fehlermeldung bereits beim Kompilieren aus.
Somit kann man also unerwünschtes Verhalten eines Programms zur Laufzeit bzw. Fehler vermeiden, die man u.U. sehr schwer findet, wenn man nicht ausfmerksam die Quellcodes durchgeht.
Die Annotation ist nicht Pflicht, hilft dem Programmierer aber Fehler zu vermeiden bzw. schneller zu finden.
 

Michael...

Top Contributor
Warum gibt es dann überhaupt WindowListener wenn es WindowAdapter gibt?
Ohne WindowListener gäbe es keinen WindowAdapter, da dieser den Listener implementiert. Der Adapter "vereinfacht" dem Programmierer den Umgang mit dem Listener, vor allem wenn er nicht alle vom Listener Interface vorgeschriebenen Methoden implementieren will.
paule7 hat gesagt.:
kann ich einen WindowClosed schließen?
Was willst Du?
 

Michael...

Top Contributor
Ich verstehe nicht was du willst. Man kann ein Fenster schließen mit dispose()
windowClosed ist einfach nur ein Methodennamen des WindowListeners, was soll man daran schließen?
 

L-ectron-X

Gesperrter Benutzer
windowClosed() ist nur eine Methode, die an einem von Java vorgesehenen Zeitpunkt, die von dir dort hinterlassenen Anweisungen in der VM ausgeführt.
Es geht also darum, bestimmten Code zu einem ganz bestimmten Zeitpunkt auszuführen. Wann dieser Code letztendlich ausgeführt wird, bestimmt die VM.
Den Zeitpunkt kannst du aus dem Namen der Methode entnehmen. windowClosing() wird also von der VM aufgerufen, wenn das Fenster gerade geschlossen wird. windowClosed() wird aufgerufen, wenn das Fenster bereits geschlossen ist.
Man kann so also u.a. in der windowClosing()-Methode noch Sachen während des Schließens ausführen lassen. Z.B. abfragen, ob der Benutzer wirklich das Fenster schließen möchte und das Schließen dann auch ggf. abbrechen.
Wenn man das Standardverhalten beim Schließen des Fensters nicht ändern möchte, kann man auch auf den WindowAdapter komplett verzichten und die Swing-Anweisungen zum Schließen von Fenstern verwenden, welche nach dem Instaziieren der Fenster-Klasse (bspw. JFrame) an dem Objekt aufgerufen wird.

Beispiel:
Java:
myFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
 

Ähnliche Java Themen

Neue Themen


Oben