Aplicacion Java J2SE utilizando MVC
dagraug — 28-08-2008 GTM 1 @ 06:13 Tags: MVC J2SE Observer ObservablePues si, otra vez yo y mis trabajos raros de la u, esta vez me dejaron hacer una aplicacion de escritorio utilizando el patron de diseño MVC implementando observer y observable.
Buscando y buscando por internet no encontre nada bueno (busque casi 3 dias:s ) :( , todo lo que encontre era para J2EE......> pero bueno con la poca informacion pude hacer algo bueno(para lo mi lo era)aunque para el profe sea una "cosita".
MVC podría definirse como : Patrón arquitectónico desarrollado para interfaces gráficas que resalta la importancia de una separación clara entre la presentación de datos y la lógica de negocio de una aplicación.
Observer: Es cualquier objeto que desee ser notificado cuando el estado de otro objeto sea alterado
Observable: Es cualquier objeto cuyo estado puede representar interés y sobre el cual otro objeto ha demostrado ese interés .
funciones que intervienen en el control de Observador y Observable:
Observer
public void update( Observableobs,Object obj ):Llamada cuando se produce un cambio en el estado del objeto Observable
Observable
public void addObserver( Observer obs ): Añade un observador a la lista interna de observadores.
public void deleteObserver( Observer obs ): Borra un observador de la lista interna de observadores
public void deleteObservers(): Borra todos los observadores de la lista interna.
public int countObserver(): Devuelve el número de observadores en la lista interna
protected void setChanged(): Levanta el flag interno que indica que el Observable ha cambiado de estado
protected void clearChanged(): Baja el flag interno que indica que el Observable ha cambiado de estado
protected boolean hasChanged(): Devuelve un valor booleano indicando si el Observable ha cambiado de estado.
public void notifyObservers(): Comprueba el flag interno para ver si el Observable ha cambiado de estado y lo notifica a todos los observadores
public void notifyObservers( Object obj ):Comprueba el flag interno para ver si el Observable ha cambiado de estado y lo notifica a todos los observadores. Les pasa el objeto especificado en la llamada para que lo usen los observadores en su método notify().
Ahora si, despues de las definiciones vamos con el ejemplo--------------> regado por el internet está la famosa "barra" que cambia valores o tambien el graficador de grados(celsius y farenheit), pues yo hice algo un poco diferente, pero como dije antes a mi me gusto, al profe nose, pero yo quede contenta con lo que aprendi. Lo que hice fue un convertidor de dolares a soles, algo muy sencillo (cuando ya entendiste mvc y tienes conociemientos de javaen este caso).
Trabajo con 5 archivos java:
ModeloSoles
MonedaGUI
DolaresGUI
SolesGUI
MVCConvertidorSoles
Les dejo3 archivos, si les interesan los otros 2, postean y se los envio!
Suerte!
Fichero ModeloSoles
public class ModeloSoles extends java.util.Observable
{ public double getD(){return monedaD;}
public double getS(){return (monedaD* 2.92) ;}
public void setD(double monD)
{ monedaD= monD;
setChanged();
notifyObservers();
}
public void setS(double monS)
{ monedaD= monS*2.92;
setChanged();
notifyObservers();
}
private double monedaD= 1;
}
Fichero MonedaGUI
import java.awt.event.ActionListener;
import java.util.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
abstract class MonedaGUI implements java.util.Observer{
MonedaGUI(String label, ModeloSoles model, int h, int v){
this.label = label;
this.model = model;
monedaFrame = new Frame(label);
monedaFrame.add("North", new Label(label));
monedaFrame.add("Center", display);
Panel buttons = new Panel();
buttons.add(upButton);
buttons.add(downButton);
monedaFrame.add("South", buttons); monedaFrame.addWindowListener(new CloseListener());
model.addObserver(this); // Conectar la vista al modelo
monedaFrame.setSize(200,200);
monedaFrame.setLocation(h, v);
monedaFrame.setVisible(true);
}
public void setDisplay(String s){ display.setText(s);}
public double getDisplay(){
double result = 0.0;
try{
result = Double.valueOf(display.getText()).doubleValue();
}catch (NumberFormatException e){}
return result;
}
public void addDisplayListener(ActionListener a){
display.addActionListener(a);
}
public void addUpListener(ActionListener a){
upButton.addActionListener(a);
}
public void addDownListener(ActionListener a){
downButton.addActionListener(a);
}
protected ModeloSoles model(){return model;}
private String label;
private ModeloSoles model;
private Frame monedaFrame;
private TextField display = new TextField();
private Button upButton = new Button("Aumentar");
private Button downButton = new Button("Disminuir");
public static class CloseListener extends WindowAdapter{
public void windowClosing(WindowEvent e){
e.getWindow().setVisible(false);
System.exit(0);
}
}
}
Fichero MVCConvertidorSoles
import java.awt.event.ActionListener;
import java.awt.event.ActionListener;
import java.util.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
public class MVCConvertidorSoles{
public static void main(String args[]){
ModeloSoles soles = new ModeloSoles();
new DolaresGUI(soles, 200, 500);
new SolesGUI(soles, 200, 350);
}
}
Disculpen por el desorden en el codigo, no es que mi codigo original este asi, sino que el editor me lo movio un poco :S...

Meneame
del.icio.us
