[JAVA] MVC Paradigma

WhiZZler

Chancentod²
ID: 85586
L
6 Mai 2006
588
32
begrüße!

lerne gerade ein wenig java und hänge hier gerade an der umsetzung des mvc paradigmas.. ich habe das ganze in 3 klassen aufgeteilt

Start.java (mit der main methode)
Controller.java (mit der verarbeitung der events)
Gui.java (alles was mit der gui zu tun hat..)

ich komme jetzt irgendwie nich dahinter, wie ich die einzelnen klassen richtig verbinde..

bis jetzt habe ich es folgendermaßen:
in der Start.java wird in der main methode ein objekt der Gui erzeugt..

beim erzeugen des objekts soll im konstruktor der gui klasse ein objekt des Controllers erzeugt werden.. und zwar mit:
Code:
Controller listener = new Controller( this );

dies funktioniert aber nicht.. der kopf des konstruktors in der Controller klasse sieht folgendermaßen aus:
Code:
public void Controller(Gui g)

ich bekomme allerdings die fehlermeldung:
"The Constructor Controller(Gui) is undefined." (von eclipse..)

und irgendwie weiß ich nich mehr weiter :/ wird wohl irgendwo ein kapitaler denkfehler meinerseits sein, da das ganze ja nicht so schwer sein kann.. aber irgendwie komm ich nich dahinter.. :-?

danke im vorraus
mfg
whizzler
 
oh mann.. da hätte ich auch selber drauf kommen können.. danke ;)

jetzt habe ich keine fehlermeldungen mehr, aber der controller funktioniert immer noch nich..

mit der Gui klasse wird ein spielfeld mit buttons erzeugt (bitte nicht über sinn oder nicht sinn nachdenken, mir geht es nur um die trennung nach dem mvc paradigma..)

Code:
spielfeld[i][j] = new JButton();
spielfeld[i][j].addActionListener( listener );

listener ist ein objekt der klasse Controller.. aber die ActionPerformed() methode der klasse Controller wird bei einem klick auf die buttons nicht ausgeführt.. hab ich irgendwo nen logikfehler beim verknüpfen der klassen?
mir geht das grade ziemlich auf die eier, weil es mit sicherheit ne selbstverständliche sache ist und ich dafür gerade zu blöd bin :ugly:
 
hast du darauf geachtet, dass der Listener den du aufrufen Möchtest auch den ActionListener impementiert?

also:

PHP:
class Contoller implements ActionListener
  public void actionPerformed(ActionEvent e) {
    ...
  }
 
jo.. der ActionListener wird implementiert..
hab momentan nur keine zeit, den code entsprechend zu kürzen, um ihn hier posten zu können.. (klausuren..)

falls keiner ne andere idee hat, melde ich mich wieder, wenn ich mehr zeit habe.. trotzdem danke ;)
 
hab momentan nur keine zeit, den code entsprechend zu kürzen, um ihn hier posten zu können

Ohne Code kann man ja nur Vermutungen anstellen...
Wird actionPerformed() nicht ausgeführt, oder passiert nur nicht das, was du erwartest? So wie es aussieht, verwendest du einen gemeinsamen Controller für alle Buttons. Demnach wirst du ja in actionPerformed() sicher eine Entscheidung treffen, welcher Button denn nun gedrückt wurde in etwa sowas:

PHP:
Object quelle = event.getSource();
if (quelle == spielfeld[i][j])
 ...

Vielleicht wird die entsprechende Stelle gar nicht ausgeführt, weil die Bedingung falsch ist. Schonmal mit dem Debugger geschaut ob actionPerformed auch wirklich nicht aufgerufen wird?
 
jo, ich hatte beim debuggen geschaut, ob actionPerformed() aufgerufen wird.. war nicht der fall..
den fehler hab ich mitlerweile auch gefunden.. im konstruktor der gui klasse wird eine methode aufgerufen, die die buttons und alles erzeugt.. intelligenter weise habe ich erst danach das listener objekt erzeugt.. :doh:

nuja.. ein zweites mal passiert mir das nicht.. wenigstens etwas ;)
danke für die hilfe allen!