Hallo,
ich möchte eine Applikation nach dem MVC Prinzip aufbauen. Ich habe mir die Theorie dazu durchgelesen, ich komme allerdings an dem Punkt an den ein Observer ins Spiel kommt nicht mehr weiter. Ich habe versucht mal eine kleine Beispielimplementation zu scheiben um mir selbst das Prinzip zu verdeutlichen. Wie gesagt, ich denke es hapert noch an so manch einer Stelle.
In Dem Beispiel gibt es einen Button und eine Checkbox. Ich möchte, dass wenn der Button gedrückt wird die Checkbox ihren Zustand ändert. Und zwar über das Model, wobei die View im Model nicht bekannt sein soll (deswegen Observer).
Unsicher bin ich mir wie gesagt bei dem Observer kram, und ob ich die Instantierung der Klassen, insbesondere des Controllers richtig gemacht habe.
Ich würde mich freuen wenn mir jemand helfen könnte. Wenn das Beispiel steht wäre es ja evtl. was für die FAQs, da hätte ich zumindest gerne soetwas in der Art gefunden
Danke!
Applikation
View:
Model:
Controller:
ich möchte eine Applikation nach dem MVC Prinzip aufbauen. Ich habe mir die Theorie dazu durchgelesen, ich komme allerdings an dem Punkt an den ein Observer ins Spiel kommt nicht mehr weiter. Ich habe versucht mal eine kleine Beispielimplementation zu scheiben um mir selbst das Prinzip zu verdeutlichen. Wie gesagt, ich denke es hapert noch an so manch einer Stelle.
In Dem Beispiel gibt es einen Button und eine Checkbox. Ich möchte, dass wenn der Button gedrückt wird die Checkbox ihren Zustand ändert. Und zwar über das Model, wobei die View im Model nicht bekannt sein soll (deswegen Observer).
Unsicher bin ich mir wie gesagt bei dem Observer kram, und ob ich die Instantierung der Klassen, insbesondere des Controllers richtig gemacht habe.
Ich würde mich freuen wenn mir jemand helfen könnte. Wenn das Beispiel steht wäre es ja evtl. was für die FAQs, da hätte ich zumindest gerne soetwas in der Art gefunden
Danke!
Applikation
Code:
package foo.MVC;
public class MyApplication {
public static void main(String[] args) {
MyModel model = new MyModel();
MyView view = new MyView(model);
view.setVisible(true);
}
}
View:
Code:
package foo.MVC;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JCheckBox;
public class MyView extends JFrame implements Observer{
private JPanel jPanel = null;
public JButton jButton = null;
public JCheckBox jCheckBox = null;
private MyController controller;
public MyView(MyModel model) {
super();
controller = new MyController(this, model);
initialize();
}
private void initialize() {
this.setSize(219, 128);
this.setContentPane(getJPanel());
this.setTitle("Titel");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
}
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(new BorderLayout());
jPanel.add(getJButton(), java.awt.BorderLayout.CENTER);
jPanel.add(getJCheckBox(), java.awt.BorderLayout.SOUTH);
}
return jPanel;
}
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("OK");
jButton.addActionListener(controller);
}
return jButton;
}
private JCheckBox getJCheckBox() {
if (jCheckBox == null) {
jCheckBox = new JCheckBox();
}
return jCheckBox;
}
public void update(Observable arg0, Object arg1) {
///??? was genau soll hire hin ???
}
} // @jve:decl-index=0:visual-constraint="10,10"
Model:
Code:
package foo.MVC;
import java.util.Observable;
public class MyModel extends Observable{
boolean myValue = true;
public MyModel(){
// hier sollte im View die Checkbox gemäß myValue eingestellt werden
}
public void setMyValue(boolean myValue){
this.myValue = myValue;
// hier sollte im View die Checkbox gemäß myValue eingestellt werden
// notifyObservers(???);
}
public boolean getMyValue(){
return myValue;
}
}
Controller:
Code:
package foo.MVC;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyController implements ActionListener{
private MyView view = null;
private MyModel model = null;
public MyController(MyView view, MyModel model ){
this.view = view;
this.model = model;
}
public void actionPerformed(ActionEvent e) {
Object which = e.getSource();
if (which == view.jButton) {
model.setMyValue(!model.getMyValue());
}
}
}