Pregunta

Saludos,

He estado estudiando Obserser / aplicación observable a Modelo-Vista-Controlador. También puedo mal uso del patrón, pero esto es lo que he hecho hasta ahora. En mi código. Cuando envías se ha de prensa, se dispara la makeChange () del modelo. Pero nunca se desencadena la actualización () de las pruebas.

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Testing implements Observer {

    public Testing() {
        model.addObserver(this);
        loadListener1();        
    }

    private void loadListener1() {
        view1.submitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                model = new Model(view1.data1Field.getText(), view1.data2Field.getText());
                model.makeChange();
                model.notifyObservers();
            }
        });
    }  

    public void update(Observable o, Object arg) { System.out.println("Notify - Observer"); }

    public static void main(String[] a) { Testing testing = new Testing(); }

    private View view1 = new View("1");    
    private Model model = new Model();

}

class View extends JFrame  {

    public View(String frame) {
        super("Frame: " + frame);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 300);
        setVisible(true);
        setLayout(new GridLayout(3, 2));
        add(data1Label); add(data1Field);
        add(data2Label); add(data2Field);
        add(submitButton); add(cancelButton);
    }

    private final JLabel data1Label = new JLabel("Data1");
    private final JLabel data2Label = new JLabel("Data2");
        public final JTextField data1Field = new JTextField();
    public final JTextField data2Field = new JTextField();
    public final JButton submitButton = new JButton("Submit");
    public final JButton cancelButton = new JButton("Cancel");

}

class Model extends Observable {

    public Model() { }
    public Model(String data1, String data2) {
        setData1(data1);
        setData2(data2);
    }
    public String getData1() { return data1; }
    public final void setData1(String data1) { this.data1 = data1; }
    public String getData2() { return data2; }
    public final void setData2(String data2) { this.data2 = data2; }
    public void makeChange() {
        setChanged();
        notifyObservers();
        System.out.println("Notify - Observable");
    }
    private String data1;
    private String data2;

}

Puede usted me guía a través de? Tu respuesta es muy apreciada.

Gracias, Cyril H.

¿Fue útil?

Solución

En el constructor de clas Prueba de su propio registro a instancia de modelo que se crea durante la inicialización de campo.

En el método actionPerformed del botón de envío que creatd una nueva instancia de modelo y más tarde llamada en esta nueva instancia los notifyObservers método que ha observadores no registrados!

Prueba este código:

private void loadListener1() {
    view1.submitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            model.setData1(view1.data1Field.getText()),
            model.setData2(view1.data2Field.getText());
            model.makeChange();
        }
    });
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top