entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

¿Donde van las clases que implementan ActionListener: controllers o views?

Tengo el archivo Main.java así:

import javax.swing.SwingUtilities;
import controllers.Controller;
import models.Model;
import views.View;

public class Main {
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                Model model = new Model();
                View view = new View();
                Controller c = new Controller(model, view);
                c.updateGUI();
            }
        });
    }
}

Tengo el archivo Controller.java, dentro del package o folder controllers, así:

package controllers;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import views.View;
import models.Model;

public class Controller {

    private Model model;
    private View view;
    //private ActionListener actionListener;

    public Controller(Model m, View v){
        this.model = m;
        this.view = v;
    }

    public void updateGUI(){
        ActionListener actionListener = new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                doAction();
            }
        };
        view.getButton().addActionListener(actionListener);
    }

    private void doAction(){
        String myString = view.getEuros();
        double euros = Double.parseDouble(myString);
        double dollars = model.convertMoney(euros);
        view.setEurosReadOnly(euros+"");
        view.setDollarsReadOnly(dollars+"");
    }

}

Mi pregunta es que si creará una clase que implementa ActionListener, donde iría: en views (el package/folder) o en controllers (el package/folder)?
La clase sería más o menos la siguiente:

public class FirstHandler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        doAction();
    }
    private void doAction(){
        String myString = view.getEuros();
        double euros = Double.parseDouble(myString);
        double dollars = model.convertMoney(euros);
        view.setEurosReadOnly(euros+"");
        view.setDollarsReadOnly(dollars+"");
    }
}

Yo pienso que iría en controladores... Desde Controller.java creas una instancia de de la clase FirstHandler y en el constructor le pasas Model y View. Pero no estoy seguro. He visto info en internet y algunos aseguran que tiene que ir en las vistas, pero de esa forma creo que tendría que cambiar varias cosas. Y otros dicen que va en los controladores.

Gracias.

1 Respuesta

1voto

TheHomicide Puntos1110

Vale gente, ya sé la mejor solución, aunque no sé si lo que estaba planteando era correcto. La solución es implementar el ActionListener en el Controller de la siguiente manera:

package controllers;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import views.View;
import models.Model;

public class Controller implements ActionListener{

    private Model model;
    private View view;
    //private ActionListener actionListener;

    public Controller(Model m, View v){
        this.model = m;
        this.view = v;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        switch(e.getActionCommand()){
            case "convert":
                this.convert();
                break;
            default:
                break;
        }
    }

    public void updateGUI(){
        view.getButton().addActionListener(this);
        view.getButton().setActionCommand("convert");
    }

    private void convert(){
        String myString = view.getEuros();
        double euros = Double.parseDouble(myString);
        double dollars = model.convertMoney(euros);
        view.setEurosReadOnly(euros+"");
        view.setDollarsReadOnly(dollars+"");
    }

}

0voto

Peter comentado

Gracias por compartir la solución.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta