J
Java2000
Gast
Ich habe eine Frage betreffend MVC. Ich bin mit dem Pattern vertraut, trotzdem fällt mir keine komfortable Lösung für ein sehr simples Problem ein. Stark vereinfacht: Ein JFrame enthält eine JTextArea und einen JButton. Bei Klick auf den JButton, soll der Inhalt der JTextArea in den Standartoutput System.out gedruckt werden. Ich würde gerne wissen, wie die MVC-Lösung dafür aussieht.
Dafür brauche ich wohl ein Model, worin der Text aus der textArea gespeichert wird. Soweit ich sehe, ist die einzige Lösung dazu, der textArea einen DocumentListener anzuhängen, der bei jedem Tastendruck den Text ins Model speichert (=sehr ineffizient).
Dann brauche ich noch eine View mit der JTextArea und dem JButton. Ganz einfach wäre es hier, wenn ich dem JButton einen ActionListener anhängen würde, der den Inhalt der JTextArea ausdruchen würde. Aber das wäre ja kein MVC (oder?). Stattdessen muss ich wohl Methoden anbieten, damit der Controller sich registrieren kann.
Zuletzt muss der Controller das Model und die View verbinden. Wie soll ich das jetzt machen? Wie schaffe ich es, dass die JTextArea ihren Inhalt ins Model mit setText() ins model speichert?
Ich habe das Skelet dafür vorbereitet. Wie verbinde ich im Controller das Model und die View richtigerweise miteinander?
Ich weiss, dass MVC ist kein perfekter Pattern, sondern mehr eine Richtlinie. Allerdings scheint es mir so, als wäre MVC in unzähligen Situationen eine schlechte Lösung und es existiert irgendwie kein Alternativ-Pattern dazu.
Vielen Dank im voraus für alle Hilfe
Gruss
Martin
Dafür brauche ich wohl ein Model, worin der Text aus der textArea gespeichert wird. Soweit ich sehe, ist die einzige Lösung dazu, der textArea einen DocumentListener anzuhängen, der bei jedem Tastendruck den Text ins Model speichert (=sehr ineffizient).
Dann brauche ich noch eine View mit der JTextArea und dem JButton. Ganz einfach wäre es hier, wenn ich dem JButton einen ActionListener anhängen würde, der den Inhalt der JTextArea ausdruchen würde. Aber das wäre ja kein MVC (oder?). Stattdessen muss ich wohl Methoden anbieten, damit der Controller sich registrieren kann.
Zuletzt muss der Controller das Model und die View verbinden. Wie soll ich das jetzt machen? Wie schaffe ich es, dass die JTextArea ihren Inhalt ins Model mit setText() ins model speichert?
Ich habe das Skelet dafür vorbereitet. Wie verbinde ich im Controller das Model und die View richtigerweise miteinander?
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.event.DocumentListener;
public class MVCQuestion {
public static void main(String[] args) {
Model model = new Model();
View view = new View(model);
new Controller(model,view);
}
}
class Model {
private String text;
public Model() {
text = "Schreibe hier einen Text";
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
class View extends JFrame {
private Model model;
private JTextArea textArea;
private JButton button;
public View(Model model) {
this.model = model;
this.textArea = new JTextArea(model.getText());
this.button = new JButton("Print");
add(textArea,BorderLayout.CENTER);
add(button,BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400,300);
setLocationRelativeTo(null);
setVisible(true);
}
public void addTextListener(DocumentListener listener) {
textArea.getDocument().addDocumentListener(listener);
}
public void addPrintListener(ActionListener listener) {
button.addActionListener(listener);
}
}
class Controller {
public Controller(Model model, View view) {
// was jetzt?
}
}
Ich weiss, dass MVC ist kein perfekter Pattern, sondern mehr eine Richtlinie. Allerdings scheint es mir so, als wäre MVC in unzähligen Situationen eine schlechte Lösung und es existiert irgendwie kein Alternativ-Pattern dazu.
Vielen Dank im voraus für alle Hilfe
Gruss
Martin
Zuletzt bearbeitet von einem Moderator: