Usuario:ManuelRomero/interfaz
De WikiEducator
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
- envía un mensaje al objeto de la clase ActualizaEstado enviándoles la entrada, el valor de la pantalla
- 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(); } }