(Nota: en orden, las tres imagenes son PanelCuenta1, PanelCuenta2 y PanelCuenta3)
import java.awt.event.*; public interface VistaCuenta { String INGRESO = "INGRESO"; String GASTO = "GASTO"; String SALDO = "SALDO"; /** Obtenemos la cantidad a ingresar * @return double con la cantidad a ingresar */ double obtenerCantidad(); /** Establecemos el saldo de la cuenta. * @param saldo double con el saldo de la cuenta. */ void saldo(double saldo); /** Mostramos un mensaje de información. * @param msg String con el mensaje a mostrar. */ void mensaje(String msg); /** Pasamos el controlador. */ void controlador(ActionListener ctr); }
Aquí teneis el enunciado en pdf.
Las clases que implementan los diferentes paneles gráficos serán PanelCuentas1, PanelCuentas2 y PanelCuentas3, respectivamente.
Las tres deben implementar la interfaz VistaCuenta.
Para controlar los botones de ingresar, extraer y saldo implementar la clase CtrCuenta.
La clase CuentaDemo será la clase principal de la aplicación.
Debemos poder poner o quitar comentarios al panel que queremos utilizar y el resto debe funcionar.
VistaCuenta vistaCuenta = new PanelCuenta1();
// VistaCuenta vistaCuenta = new PanelCuenta2();
//VistaCuenta vistaCuenta = new PanelCuenta3();
Observa que la segunda y la tercera versión no proporcionan un botón para consultar el saldo. En la tercera versión, el campo de texto en el que introducir la cantidad será no editable, forzando a que la cantidad se introduzca utilizando la botonera. Esta botonera será controlada desde el propio panel. Es decir, el panel implementará la interfaz ActionListener.
Aquí os pongo la demo:
import java.awt.event.ActionListener; import javax.swing.*; public class CuentaDemo { public static void main(String []args) { //creamos la vista //VistaCuenta vistaCuenta = new PanelCuenta1(); //VistaCuenta vistaCuenta = new PanelCuenta2(); VistaCuenta vistaCuenta = new PanelCuenta3(); // Creamos el modelo Cuenta cuenta = new Cuenta(0); //creamos el controlador pasandole la vista y el modelo ActionListener ctrCuenta = new ctrCuenta(vistaCuenta, cuenta); //Le decimos a la vista el nombre del controlador vistaCuenta.controlador(ctrCuenta); //Creamos el contenido superior JFrame ventana = new JFrame("Control de cuentas"); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.setContentPane((JPanel)vistaCuenta); ventana.pack(); ventana.setVisible(true); } }
Bueno pues aquí os pongo los códigos fuente:
Primero el del controlador ctrCuenta:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //Controlador public class ctrCuenta implements ActionListener{ //referencia al modelo private Cuenta cuenta; //referencia a la vista private VistaCuenta vistacuenta; //constructor que recibe a la vista y al modelo public ctrCuenta(VistaCuenta vc, Cuenta c) { cuenta = c; vistacuenta = vc; } public void actionPerformed(ActionEvent evento) { String command = evento.getActionCommand(); if (command.equals(VistaCuenta.INGRESO)) { double cantidad = vistacuenta.obtenerCantidad(); cuenta.ingresa(cantidad); vistacuenta.saldo(cuenta.saldo()); vistacuenta.mensaje("Ingreso de "+ cantidad + "€"+" realizado con éxito."); } else if(command.equals(VistaCuenta.GASTO)) { double cantidad = vistacuenta.obtenerCantidad(); cuenta.extrae(cantidad); vistacuenta.saldo(cuenta.saldo()); vistacuenta.mensaje("Pago de "+ cantidad + "€"+" realizado con éxito."); } else if(command.equals(VistaCuenta.SALDO)) { vistacuenta.mensaje("Su saldo es de "+ cuenta.saldo() + "€"); } } }
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionListener; import javax.swing.*; public class PanelCuenta1 extends JPanel implements VistaCuenta{ private static final long serialVersionUID = 1L; private JButton saldoJB; private JButton extraerJB; private JButton ingresarJB; private JTextField cantidadJTF; private JLabel mensajeJL; private JLabel saldoJL; public PanelCuenta1() { //Creacion de los componentes saldoJB = new JButton("SALDO"); extraerJB = new JButton("EXTRAER"); ingresarJB = new JButton("INGRESAR"); cantidadJTF = new JTextField(10); mensajeJL = new JLabel(" "); saldoJL = new JLabel(" "); //Creacion del panel este. JPanel panelD = new JPanel(); panelD.setLayout(new GridLayout(3,1)); //3 filas y 1 columna panelD.add(ingresarJB); panelD.add(extraerJB); panelD.add(saldoJB); //creo el panel central JPanel panelC = new JPanel(); panelC.setLayout(new GridLayout(2,2)); panelC.add(new JLabel("Cantidad")); panelC.add(cantidadJTF); panelC.add(new JLabel("Saldo: ")); panelC.add(saldoJL); //Montar el panel principal setLayout(new BorderLayout()); add(panelD, BorderLayout.EAST); add(panelC, BorderLayout.CENTER); add(mensajeJL, BorderLayout.SOUTH); } @Override public double obtenerCantidad() { return Double.parseDouble(cantidadJTF.getText()); } @Override public void saldo(double saldo) { saldoJL.setText(String.format("%12.2f", saldo)); } @Override public void mensaje(String msg) { mensajeJL.setText(msg); } @Override public void controlador(ActionListener ctr) { ingresarJB.addActionListener(ctr); ingresarJB.setActionCommand(INGRESO); saldoJB.addActionListener(ctr); saldoJB.setActionCommand(SALDO); extraerJB.addActionListener(ctr); extraerJB.setActionCommand(GASTO); } }
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionListener; import javax.swing.*; public class PanelCuenta2 extends JPanel implements VistaCuenta{ private static final long serialVersionUID = 1L; private JButton extraerJB; private JButton ingresarJB; private JTextField cantidadJTF; private JLabel saldoJL; private JLabel mensajeJL; public PanelCuenta2() { extraerJB = new JButton("EXTRAER"); ingresarJB = new JButton("INGRESAR"); cantidadJTF = new JTextField(10); saldoJL = new JLabel(" "); mensajeJL = new JLabel(" "); //Panel Este JPanel panelEste = new JPanel(); // Creamos el panel panelEste.setLayout(new GridLayout(3, 1)); //2 filas, 1 columna panelEste.add(new JLabel("Saldo: ")); panelEste.add(saldoJL); panelEste.add(mensajeJL); //Panel de Botones JPanel botonPanel = new JPanel(); botonPanel.setLayout(new GridLayout(1, 2)); botonPanel.add(ingresarJB); botonPanel.add(extraerJB); //Panel Oeste JPanel panelOeste = new JPanel(); panelOeste.setLayout(new GridLayout(2, 1)); panelOeste.add(cantidadJTF); panelOeste.add(botonPanel, BorderLayout.SOUTH); //Panel total setLayout(new GridLayout(1, 2)); add(panelOeste, BorderLayout.WEST); add(panelEste, BorderLayout.EAST); } @Override public double obtenerCantidad() { return Double.parseDouble(cantidadJTF.getText()); } @Override public void saldo(double saldo) { saldoJL.setText(String.format("%12.2f", saldo)); } @Override public void mensaje(String msg) { mensajeJL.setText(msg); } @Override public void controlador(ActionListener ctr) { ingresarJB.addActionListener(ctr); ingresarJB.setActionCommand(INGRESO); extraerJB.addActionListener(ctr); extraerJB.setActionCommand(GASTO); } }
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class PanelCuenta3 extends JPanel implements ActionListener, VistaCuenta{ private static final long serialVersionUID = 1L; private JButton b1JB; private JButton b2JB; private JButton b3JB; private JButton b4JB; private JButton b5JB; private JButton b6JB; private JButton b7JB; private JButton b8JB; private JButton b9JB; private JButton b0JB; private JButton ingresarJB; private JButton extraerJB; private JButton borrarJB; private JLabel saldoJL; private JTextField cantidadJTF; private JTextArea mensajesJTA; public PanelCuenta3() { b1JB = new JButton("1"); b2JB = new JButton("2"); b3JB = new JButton("3"); b4JB = new JButton("4"); b5JB = new JButton("5"); b6JB = new JButton("6"); b7JB = new JButton("7"); b8JB = new JButton("8"); b9JB = new JButton("9"); b0JB = new JButton("0"); ingresarJB = new JButton("INGRESAR"); extraerJB = new JButton("EXTRAER"); borrarJB = new JButton("Borrar"); saldoJL = new JLabel(" "); cantidadJTF = new JTextField(" "); cantidadJTF.setEditable(false); mensajesJTA = new JTextArea(" "); b1JB.addActionListener(this); b2JB.addActionListener(this); b3JB.addActionListener(this); b4JB.addActionListener(this); b5JB.addActionListener(this); b6JB.addActionListener(this); b7JB.addActionListener(this); b8JB.addActionListener(this); b9JB.addActionListener(this); b0JB.addActionListener(this); borrarJB.addActionListener(this); b1JB.setActionCommand("1"); b2JB.setActionCommand("2"); b3JB.setActionCommand("3"); b4JB.setActionCommand("4"); b5JB.setActionCommand("5"); b6JB.setActionCommand("6"); b7JB.setActionCommand("7"); b8JB.setActionCommand("8"); b9JB.setActionCommand("9"); b0JB.setActionCommand("0"); borrarJB.setActionCommand("BORRAR"); //Panel números JPanel panelNum = new JPanel(); panelNum.setLayout(new GridLayout(4,3)); panelNum.add(b1JB); panelNum.add(b2JB); panelNum.add(b3JB); panelNum.add(b4JB); panelNum.add(b5JB); panelNum.add(b6JB); panelNum.add(b7JB); panelNum.add(b8JB); panelNum.add(b9JB); panelNum.add(b0JB); panelNum.add(new JLabel(" ")); panelNum.add(borrarJB); //Panel de acciones JPanel panelAccion = new JPanel(); panelAccion.setLayout(new GridLayout(2, 1)); panelAccion.add(ingresarJB); panelAccion.add(extraerJB); //panel Central JPanel panelCentral = new JPanel(); panelCentral.setLayout(new GridLayout(1, 2)); panelCentral.add(panelNum); panelCentral.add(panelAccion); //Panel Saldo JPanel panelSaldo = new JPanel(); panelSaldo.setLayout(new GridLayout(1, 2)); panelSaldo.add(new JLabel("Saldo: ")); panelSaldo.add(saldoJL); setLayout(new GridLayout(4, 1)); add(cantidadJTF, BorderLayout.EAST); add(panelCentral, BorderLayout.EAST); add(panelSaldo, BorderLayout.EAST); add(mensajesJTA, BorderLayout.EAST); } @Override public double obtenerCantidad() { return Double.parseDouble(cantidadJTF.getText()); } @Override public void saldo(double saldo) { saldoJL.setText(String.format("%12.2f", saldo)); } @Override public void mensaje(String msg) { mensajesJTA.append(msg + "\n" + "\n"); } @Override public void controlador(ActionListener ctr) { ingresarJB.addActionListener(ctr); ingresarJB.setActionCommand(INGRESO); extraerJB.addActionListener(ctr); extraerJB.setActionCommand(GASTO); } @Override public void actionPerformed(ActionEvent arg0) { String e = arg0.getActionCommand(); if(e.equals("BORRAR")) { cantidadJTF.setText(" "); } else { int i = Integer.parseInt(e); cantidadJTF.setText(Integer.toString( i+10*Integer.parseInt( cantidadJTF.getText().equals(" ") ? "0" : cantidadJTF.getText()))); } } }
Eso es todo gente. No dudeis en preguntar cualquier duda y hasta el Domingo.
Saludos ;)
Gracias :D
ResponderEliminar