Strukturierungsfrage bezüglich Listeners

Status
Nicht offen für weitere Antworten.

SebiB90

Top Contributor
ich wollt mal fragen, wie man das folgende "Problem" standardmäßig in einer Anwendung löst.
Also ich habe zum beispiel ein Dialog in den sind ein ok und ein cancel button. Und man muss die actionevents mit dem actionlistener abfangen. nur wie sollte ich diesen actionlistener implementieren.
Also paar Möglichkeiten:
1. Die Klasse des Dialog implementiert den ActionListener (so mach ich es bisher)
2. Eine Eigene Klasse für den ActionListener schreiben (halt ich aber irgendwie für umständlich)
3. Anoyme Klasse,also direkt addActionListener(new ActionLister() { ... });
4. Ein innere Klasse in Dialog implementieren
5. ...
Welche Implementierung ist Standard bzw. würdet ihr mir empfehlen?
Das soll jetzt nicht nur auf den ActionListener bezogen sein sondern allgemein auf alle Listener,actionlistener war nur das einfachste beispiel.
 

byte

Top Contributor
Also ich habe jetzt selbst noch nicht die weitreichenden GUI Erfahrungen, aber ich würde zu 3 oder 4 tendieren. Vorteil bei innerer oder anonymer Klasse: Du hast Zugriff auf die äußere Klasse. Innere Klasse hat gegenüber der anonymen Implementierung des Interfaces den Vorteil, dass Du auch von nem ListenerAdapter erben kannst und somit nicht jede (vielleicht gar nicht benötigte Methode) des Interfaces implementieren musst. Wenn man allerdings einen Listener in mehreren Klassen verwenden könnte, dann kann man natürlich auch ne eigene Klasse draus machen.

Ich würde sagen, es kommt einfach auf den konkreten Anwendungsfall drauf an, welche Lösung die beste ist.

Und nun können die GUI Experten etwas dazu sagen... ;)
 

André Uhres

Top Contributor
byto hat gesagt.:
..Innere Klasse hat gegenüber der anonymen Implementierung des Interfaces den Vorteil, dass Du auch von nem ListenerAdapter erben kannst ...
Adapter geht auch anonym:
Code:
       panel.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
            }
        });
 

AlArenal

Top Contributor
Ich benutzte meist 4., wobei ich gerne mit nem parametrisierten ActionAdapter arbeite, d.h. nicht je eine Klasse für OK und Cancel, sondern eine für beides...
 

SebiB90

Top Contributor
Erstellste dann auch nur ein Instanz des Listeners für bei Buttons oder für beide eine extra instanz
also so:
Code:
Listener l = new Listener();
ok.addActionListener(l);
cancel.addActionListener(l);
oder so?
Code:
ok.addActionListener(new Listener());
cancel.addActionListener(new Listener());
 
B

Beni

Gast
Ich schliesse mich AlArenal an.

In letzter Zeit benutze ich auch vermehrt das Interface Action, bzw. seine Unterklasse AbstractAction.
So eine Action kann man einem oder auch mehreren Buttons übergeben, und sie wird aufgerufen, wenn der Knopf gedrückt wurde. Zusätzlich unterstützt eine Action auch Shortcuts (z.B. ENTER, siehe Action.ACCELERATOR_KEY + ein KeyStroke).
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben