bei dem ganzen Programm geht's um ein Depot (aus drei Kontos). Diese werden in verschiedenen Panels angezeigt und man kann Ein- und Auszahlungen tätigen.
Es gibt ein Panel, wo der Anteil der Konten am Depot grafisch dargestellt ist und ein Protokoll-Panel.
Als View also die Anzeigen der Konten (u.a.) als Model drei Kontenklassen und als Controller einen Listener für die Textfelder (natürlich als eigene Datei und Klasse).
Nun ist klar, dass der Listener die Kontenklassen ändert und die dann die View(s) informieren.
Aber wie bekommt der Listener die Werte, die ins Textfeld eingetragen werden (ohne gegen das MVC-Prinzip zu verstossen)?
Mir fiel nur ein:
- mit gettern in den KontoPanel Klassen (verstösst gegen das Prinzip)
- Wert im ActionCommand uebergeben (kam mir komisch vor)
Hä also ich weiß nicht ob ich dich ganz richtig verstanden habe. Dein Problem ist, dass der Listener (z.B. ActionListener nicht die Daten aus dem View bekommt ja?
Heiß MVC wirklich, dass man 3 Klassen haben muss? Darf das View denn keinen ActionListener implementieren?
Also ich hab das immer mit ActionListener im JFrame z.B. gemacht und dann aus actionPerformed() ein z.B. processDataChangeEvent() gemacht, welches dann das Model "alarmiert" hat.
du kannst in deinem view soviele listener einbauen wie du willst. halte dir immer vor augen, dass du im view "nur" das frontend gestaltest. um auf die jeweiligen fachklassen im model zuzugreifen, benutzt du die controller-instanz, häufig auch als handler benannt. also, was musst du jetzt machen? nimm die daten im view entgegen, schicke diese an den handler (der evtl. plausibilität etc. abprüft) und dieser wiederum erzeugt die entsprechenden objekte im model oder persistenziert das ganze.
Danke schonmal für die Antworten, das Problem ist nur, dass ich den Listener extern (als eigene Datei und Klasse) gestalten muss - Aufgabe ist so gestaltet.
Daher kann ich das Problem so nicht lösen, habe es zwar im Moment mit einem Getter, aber wenn ich alles richtig verstanden habe, sollte das nach dem MVC Prinzip ja nicht so sein.
public class MyView extends JFrame {
public MyFrame() {
MyController ctrl = new MyController();
JTextField txt = new JTextField("Hello World");
txt.addActionListener(ctrl);
getContentPane().add(txt);
}
}
public class MyController implements ActionListener {
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
Object source = e.getSource();
if(e.equals("text1")) {
JTextField txt= (JTextField)source;
String value = txt.getText();
}
}
}
So, jetzt hast du in value den Wert des Textfeldes. Einverstanden so???
Und so nebenbei: Warum einfach wenns auch schwierig geht *rofl* Typisch Schule oder?