# Feine Englische Art?



## The_S (3. Aug 2006)

Hi,

ich bin gerade dabei ein kleines Streitgespräch mit meinem Azubi-Kollegen auszutragen. Es geht darum, ob es "ethisch" vertretbar ist auf einen Button einer anderen Klasse einen ActionListener zu adden. Also im Prinzip so


```
public class Klasse1 extends JFrame implements ActionListener {

    ...
    private Klasse2 kl2 = null;
    ...

    public Klasse1() {

        ...
        kl2 = new Klasse2();
        kl2.getOK().addActionListener(this);
        ...
    }

    ...

    public void actionPerformed(ActionEvent evt) {

        if (evt.getSource() == kl2.getOK()) {
            // reagier darauf
        }
    }
}
```


```
public class Klasse2 extends JFrame {

    ...
    private JButton ok = null;
    ...

    public Klasse2() {

        ...
        ok = new JButton("OK");
        ...
    }

    public JButton getOK() {
        return ok;
    }
}
```

.

Und da wir uns nicht einigen konnten, habsch mir gedacht frag ich mal hier nach  . Danke für eure Antworten.


----------



## Wildcard (3. Aug 2006)

Natürlich ist das vertretbar, nach MVC oft sogar der richtige Weg, da ein Controller die Events verarbeiten soll.
Dein Beispiel ist allerdings daneben, da dein 'Controller' auch ein JFrame ist.


----------



## Roar (3. Aug 2006)

wenn klasse2 so blöt ist und den button allen anderne klassen zugänglich macht, muss klasse2 damit rechnen, dass klasse1 am button rumpfuscht. wenn man das nicht machen soll, entfern halt die getOK() methode ;-)
ob das moralisch vertretbar ist, muss der autor von klasse2 entscheiden. wenn der sich für eine getOK() methode entscheidet ist das nicht der fehler von autos von klasse1 wenn er mit dem button anstellt was er will


----------



## foobar (3. Aug 2006)

Was soll das bringen? Ausser Verwirrung bei dem jenigen der den Code später warten darf/muß.


----------



## The_S (3. Aug 2006)

Also für mich ist das net unbedingt vertretbar. Da entsteht imho nur Wurstelcode. Und irgendwo kann ich auch net glauben dass das so wirklich schön ist.

@Wildcard

Ist halt genau so gedacht, mit z. B. zwei JFrames. Deswegen meine Frage  .

Trotzdem würde ich gerne noch weitere Meinungen hören.


----------



## Wildcard (3. Aug 2006)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> @Wildcard
> Ist halt genau so gedacht, mit z. B. zwei JFrames. Deswegen meine Frage  .


Dann ist das IMO Blödsinn


----------



## Illuvatar (3. Aug 2006)

Ich würde wenn dann Delegatenmethoden einführen, also "addOKButtonActionListener" oder so. Aber egal, wie egal welcher ActionListener geadded wird, Blup extends JFrame implements ActionListener != MVC.


----------



## Leroy42 (3. Aug 2006)

Bevor ich sowas progge, würde ich der Klasse, die diesen Button anbieten will.
ein Interface verpassen, über den bei Drücken des Buttons, die andere Klasse
als eine Art Listener benachrichtigt wird.


----------



## The_S (3. Aug 2006)

gut, dann is das soweit geklärt. Danke schön  !


----------



## byte (3. Aug 2006)

Illuvatar hat gesagt.:
			
		

> Blup extends JFrame implements ActionListener != MVC.



Warum? In diesem Fall sind es zwei JFrames, also beides View. Und die muss man laut MVC ja nun nicht kapseln.


----------



## SnooP (3. Aug 2006)

aber das implements ActionListener impliziert einen gleichzeitigen Controller in der selben Klasse - sprich View+Controller... das spricht gegen MVC, auch wenn es bei kleinen Oberflächen imho nicht sträflig ist, sowas zu machen... wichtiger ist imho, dass das Modell getrennt ist.


----------



## byte (3. Aug 2006)

In diesem Fall kümmert sich der Listener aber nicht um die Kommunikation zwischen Model und View sondern zwischen View und View. Demnach ist es doch kein Controller nach dem MCV-Prinzip. Oder habe ich eine goldene Regel übersehen die da lautet: Listener dürfen *ausschließlich* als Controller zwischen Model und View fungieren? 

Edit: Wenn natürlich in der actionPerformed() auch noch das Model involviert ist, dann ist das Ganze natürlich Käse.  :roll:


----------



## Wildcard (3. Aug 2006)

SnooP hat gesagt.:
			
		

> aber das implements ActionListener impliziert einen gleichzeitigen Controller in der selben Klasse - sprich View+Controller... das spricht gegen MVC


Ganz so tragisch ist es nicht wenn View und Controller zusammenwachsen (wirklich entkoppeln kann man die praktisch nie). Fast alle Swing Klassen sind sowohl Controller als auch View.


----------

