Usuario:ManuelRomero/interfaz

De WikiEducator
Saltar a: navegación, buscar

VentanaCalculadora

Es la clase gráfica
Lleva un atributo de tipo de calculadora
Gestion las acciones gráficas
Es interesanten tener encuenta como interactua con otras clases
  1. envía un mensaje al objeto de la clase ActualizaEstado enviándoles la entrada, el valor de la pantalla
  2. Lee el atributo resultado de la clase AccionCalculadora objeto accion y lo pone en la pantalla
Character entrada = ((JButton)e.getSource()).getText().charAt(0);
		estado.setTipo(this.modoOperacion);
		estado.actualizaEstado(entrada,tPantalla.getText(),accion,modoOperacion);
 
		tPantalla.setText(accion.getResultado());
		//tPantalla.setText(tPantalla.getText()+entrada);

Código

package calculadora;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
 
 
public class VentanaCalculadora extends JFrame implements ActionListener{
 
	//Estdo de operacion de la calculadora
	final int REAL =0;
	final int RACIONAL = 1;
 
	EstadoCalculadora estado = new EstadoCalculadora();
	AccionCalculadora accion = new AccionCalculadora();
 
	int modoOperacion ;
 
	JButton bDiv = new JButton();
	JButton bSep = new JButton();
 
	//	Definimos atributos de mi clase
	JTextField tPantalla = new JTextField();
 
	//Definimos botones
	Character [] botones ={'7','8','9','C',(char)8592, //Caracter retroceso
			   '4','5','6','+','%',
			   '1','2','3','-',(char)177,//caracter +/-
			   '0','*','/','.','='};
 
 
	Font fuente = new Font("Arial", Font.BOLD,18);
 
	GridLayout lBotones = new GridLayout(4,5,5,5);
	BorderLayout lPpal = new BorderLayout();
 
	JPanel pBotones = new JPanel();
 
	//Menus
	JMenuBar barraMenu = new JMenuBar();
	JMenu mEstilo = new JMenu("Estilo");
	JMenu mAyuda = new JMenu("Ayuda");
	JMenu mSalir = new JMenu("Salir");
	private int tipo; //Para saber como interpretar las entradas
 
	JRadioButtonMenuItem  bRacional = new JRadioButtonMenuItem("Racionall");
	JRadioButtonMenuItem  bReal = new JRadioButtonMenuItem("Real");
 
	ButtonGroup grupo = new ButtonGroup();
 
	VentanaCalculadora(){
		addBotones();
		addMenu();
 
		setJMenuBar(barraMenu);
 
		modoOperacion=REAL;
		setTitle("Calculadora Real");
 
 
		setLayout(lPpal);
		tPantalla.setHorizontalAlignment(JTextField.RIGHT);
		tPantalla.setFont(fuente);
 
 
		add(tPantalla,BorderLayout.NORTH);
		add(pBotones, BorderLayout.CENTER);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		pack();
	}
 
	private void addMenu(){
		barraMenu.add(mEstilo);
		barraMenu.add(mAyuda);
 
		barraMenu.add(mSalir);
 
		//Añadir escuchadores de evento a los botones
		bReal.addActionListener(this);
		bRacional.addActionListener(this);
 
 
		grupo.add(bRacional);
		grupo.add(bReal);
 
		bReal.setSelected(true);
 
		mEstilo.add(bRacional);
		mEstilo.add(bReal);
 
 
 
 
 
	}
	private void addBotones(){
 
		pBotones.setLayout(lBotones);
 
		for (int i=0;i<20;i++){
 
			JButton b = new JButton(botones[i].toString());
			b.setFont(fuente);
			b.addActionListener(this);
			pBotones.add(b);
			if (i==17){
				bDiv=b;
			}
			if (i==18){
				bSep=b;
			}
 
 
		}
	}
 
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() ==bReal){
			modoOperacion=REAL;
			setTitle("Calculadora Real");
			bDiv.setText("/");
			bSep.setText(".");
			estado.setTipo(this.modoOperacion);
			estado.inicializa(accion);
			tPantalla.setText(accion.getResultado());
		}else 
		if (e.getSource() ==bRacional){
			modoOperacion=RACIONAL;	
			setTitle("Calculadora Racional");
			bDiv.setText(":");
			bSep.setText("/");
			estado.setTipo(this.modoOperacion);
			estado.inicializa(accion);
			tPantalla.setText(accion.getResultado());
		}else{			
			Character entrada = ((JButton)e.getSource()).getText().charAt(0);
			estado.setTipo(this.modoOperacion);
			estado.actualizaEstado(entrada,tPantalla.getText(),accion,modoOperacion);
 
			tPantalla.setText(accion.getResultado());
			//tPantalla.setText(tPantalla.getText()+entrada);
		}
	}
public static void main (String []s){
	VentanaCalculadora v  = new VentanaCalculadora();
}
 
}