title image


Smiley Habe ich das MVC-Pattern richtig angewandt?
Normalerweise hab ich in meinem GUI-Quellcode immer auch die Programmlogik drin.

Da mich das aber schon immer gestört habe, hab ich mir heute mal ein Beispiel aus dem Internet gesucht und an das MVC-Pattern angepasst.



Nun wollte ich mal wissen, ob des denn so richtig ist. :-)

Implementiert ist es so, dass ich ein Model, eine View und einen Controller habe.

Der View wird das Model übergeben, so dass diese die Daten ändern kann.

Am Model ist der Controller registriert, so dass er immer über Änderungen informiert wird.

Wenn dann so eine Änderung eintritt, sendet der Controller die neuen Daten des Model an die View.



Wenn da was falsch dran ist, dann bitte ich um Verbesserungsvorschläge.



Hawk



Hier mal der Quelltext der Klassen:





public class TemperatureModel extends java.util.Observable {



private double m_d_temperatureF = 32.0;



public TemperatureModel() {}



public double getF() {

return m_d_temperatureF;

}



public void setF(double a_tempF) {

m_d_temperatureF = a_tempF;

setChanged();

notifyObservers();

}



public void setC(double a_tempC) {

m_d_temperatureF = a_tempC * 9.0 / 5.0 + 32.0;

setChanged();

notifyObservers();

}



public double getC() {

return ((m_d_temperatureF - 32.0) * 5.0 / 9.0);

}

}



import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import java.text.*;



public class TemperatureView extends JFrame {



private TemperatureModel m_model = null;

private JPanel m_panelF = null;

private JPanel m_panelC = null;

private JPanel m_panelButtons = null;

private JTextField m_textFieldF = null;

private JTextField m_textFieldC = null;

private JButton m_convertButtonFC = null;

private JButton m_convertButtonCF = null;



public TemperatureView(TemperatureModel a_model) {

super("MVC-Test");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

m_model = a_model;

m_textFieldF = new JTextField(7);

m_textFieldC = new JTextField(7);

m_convertButtonFC = new JButton(new AbstractAction("F -> C") {

public void actionPerformed(ActionEvent e) {

double v_temp = 0.0;

try {

v_temp = Double.valueOf(m_textFieldF.getText().replace(',', '.')).doubleValue();

} catch (NumberFormatException ex) {}

m_model.setF(v_temp);

}

}

);

m_convertButtonCF = new JButton(new AbstractAction("C -> F") {

public void actionPerformed(ActionEvent e) {

double v_temp = 0.0;

try {

v_temp = Double.valueOf(m_textFieldC.getText().replace(',', '.')).doubleValue();

} catch (NumberFormatException ex) {}

m_model.setC(v_temp);

}

}

);



getContentPane().setLayout(new GridBagLayout());

GridBagConstraints v_constraints = new GridBagConstraints();



v_constraints.fill = GridBagConstraints.HORIZONTAL;

v_constraints.anchor = GridBagConstraints.NORTH;

v_constraints.weightx = 1;

v_constraints.weighty = 1;



v_constraints.gridx = 0;

v_constraints.gridy = 0;

getContentPane().add(new JLabel("Farenheit"), v_constraints);



v_constraints.gridx = 1;

v_constraints.gridy = 0;

getContentPane().add(m_textFieldF, v_constraints);



v_constraints.gridx = 0;

v_constraints.gridy = 1;

getContentPane().add(new JLabel("Celcius"), v_constraints);



v_constraints.gridx = 1;

v_constraints.gridy = 1;

getContentPane().add(m_textFieldC, v_constraints);



v_constraints.gridx = 0;

v_constraints.gridy = 2;

getContentPane().add(m_convertButtonFC, v_constraints);



v_constraints.gridx = 1;

v_constraints.gridy = 2;

getContentPane().add(m_convertButtonCF, v_constraints);



centerOnScreen();

}



private void centerOnScreen() {

pack();

setResizable(false);

Dimension v_screen = Toolkit.getDefaultToolkit().getScreenSize();

setLocation((int)(v_screen.getWidth() - getWidth()) / 2,

(int)(v_screen.getHeight() - getHeight()) / 2);

}



protected void setC(double a_temp) {

NumberFormat v_format = new DecimalFormat("0.00");

m_textFieldC.setText(v_format.format(a_temp));

}



protected void setF(double a_temp) {

NumberFormat v_format = new DecimalFormat("0.00");

m_textFieldF.setText(v_format.format(a_temp));

}

}



import java.util.*;

public class TemperatureController implements Observer {

TemperatureModel m_model = null;

TemperatureView m_view = null;

public TemperatureController(TemperatureModel a_model, TemperatureView a_view) {

m_model = a_model;

m_view = a_view;

m_model.addObserver(this);

}



public void update(Observable t, Object o) {

m_view.setF(m_model.getF());

m_view.setC(m_model.getC());

}

}



public class TemperatureMain {

public static void main(String[] args) {

TemperatureModel v_model = new TemperatureModel();

TemperatureView v_view = new TemperatureView(v_model);

TemperatureController v_controller = new TemperatureController(v_model, v_view);



v_view.setVisible(true);

}

}



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: