Java: Calculadora sencilla en
modo gráfico
Esta es una calculadora sencilla en modo gráfico escrita en Java.
Implementa las operaciones básicas: sumar, restar, multiplicar y dividir
Main.java
view source
print?
01 /*
02 * Ejercicio: Calculadora sencilla
03 * - Implementar la Interfaz de usuario
* - Implementar los métodos siguientes a través de los listeners
04
adecuados:
05 * - Sumar
06 * - Restar
07 * - Multiplicar
08 * - Dividir
09 */
10
11 package calculadora;
12
13 /**
14 *
15 * @author: $Author: franchux $
16 * @version: $Rev: 70 $
17 * @date: $Date: 2009-04-13 13:06:00 +0200 (lun 13 de abr de 2009) $
18 * $Id: Main.java 70 2009-04-13 11:06:00Z franchux $
19 */
20 public class Main {
21
22 /**
23 * @param args the command line arguments
24 */
25 public static void main(String[] args) {
26 // TODO code application logic here
27 VentanaCalculadora calculadora = new VentanaCalculadora();
28 calculadora.setVisible(true);
29 }
30
31 }
VentanaCalculadora.java
/*
002 * Interfaz para nuestra calculadora sencilla
003 */
004 package calculadora;
005
006 import java.awt.*;
007 import java.awt.event.MouseAdapter;
008 import java.awt.event.MouseEvent;
009
010 import javax.swing.*;
011 import javax.swing.border.EmptyBorder;
012
013 /**
014 *
015 * @author: $Author: franchux $
016 * @version: $Rev: 75 $
* @date: $Date: 2009-04-14 00:21:18 +0200 (mar 14 de abr de 2009)
017
$
018 * $Id: VentanaCalculadora.java 75 2009-04-13 22:21:18Z franchux $
019 */
020 public class VentanaCalculadora extends JFrame {
021
022 /** numero tecleado */
023 JTextField pantalla;
024
/** guarda el resultado de la operacion anterior o el número
025
tecleado */
026 double resultado;
027
028 /** para guardar la operacion a realizar */
029 String operacion;
030
031 /** Los paneles donde colocaremos los botones */
032 JPanel panelNumeros, panelOperaciones;
033
034 /** Indica si estamos iniciando o no una operación */
035 boolean nuevaOperacion = true;
036
037 /**
* Constructor. Crea los botones y componentes de la
038
calculadora
039 */
040 public VentanaCalculadora() {
041 super();
042 setSize(250, 300);
043 setTitle("Calculadora Simple");
044 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
045 setResizable(false);
046
047 // Vamos a dibujar sobre el panel
048 JPanel panel = (JPanel) this.getContentPane();
049 panel.setLayout(new BorderLayout());
050
051 pantalla = new JTextField("0", 20);
052 pantalla.setBorder(new EmptyBorder(4, 4, 4, 4));
053 pantalla.setFont(new Font("Arial", Font.BOLD, 25));
054 pantalla.setHorizontalAlignment(JTextField.RIGHT);
055 pantalla.setEditable(false);
056 pantalla.setBackground(Color.WHITE);
057 panel.add("North", pantalla);
058
059 panelNumeros = new JPanel();
060 panelNumeros.setLayout(new GridLayout(4, 3));
061 panelNumeros.setBorder(new EmptyBorder(4, 4, 4, 4));
062
063 for (int n = 9; n >= 0; n--) {
064 nuevoBotonNumerico("" + n);
065 }
066
067 nuevoBotonNumerico(".");
068
069 panel.add("Center", panelNumeros);
070
071 panelOperaciones = new JPanel();
072 panelOperaciones.setLayout(new GridLayout(6, 1));
073 panelOperaciones.setBorder(new EmptyBorder(4, 4, 4, 4));
074
075 nuevoBotonOperacion("+");
076 nuevoBotonOperacion("-");
077 nuevoBotonOperacion("*");
078 nuevoBotonOperacion("/");
079 nuevoBotonOperacion("=");
080 nuevoBotonOperacion("CE");
081
082 panel.add("East", panelOperaciones);
083
084 validate();
085 }
086
087 /**
* Crea un boton del teclado numérico y enlaza sus eventos con
088
el listener correspondiente
089 *
090 * @param digito boton a crear
091 */
092 private void nuevoBotonNumerico(String digito) {
093 JButton btn = new JButton();
094 btn.setText(digito);
095 btn.addMouseListener(
096 new MouseAdapter() {
097
098 @Override
099 public void mouseReleased(MouseEvent evt) {
JButton btn = (JButton)
100
evt.getSource();
101 numeroPulsado(btn.getText());
102 }
103 });
104
105 panelNumeros.add(btn);
106
107 }
108
109 /**
110 * Crea un botón de operacion y lo enlaza con sus eventos.
111 *
112 * @param operacion
113 */
114 private void nuevoBotonOperacion(String operacion) {
115 JButton btn = new JButton(operacion);
116 btn.setForeground(Color.RED);
117
118 btn.addMouseListener(
119 new MouseAdapter() {
120
121 @Override
122 public void mouseReleased(MouseEvent evt) {
123 JButton btn = (JButton) evt.getSource();
124 operacionPulsado(btn.getText());
125 }
126 });
127
128 panelOperaciones.add(btn);
129 }
130
131 /**
132 * Gestiona las pulsaciones de teclas numéricas
133 *
134 * @param digito tecla pulsada
135 */
136 private void numeroPulsado(String digito) {
137 if (pantalla.getText().equals("0") || nuevaOperacion) {
138 pantalla.setText(digito);
139 } else {
140 pantalla.setText(pantalla.getText() + digito);
141 }
142 nuevaOperacion = false;
143 }
144
145 /**
146 * Gestiona el gestiona las pulsaciones de teclas de operación
147 * @param tecla
148 */
149 private void operacionPulsado(String tecla) {
150 if (tecla.equals("=")) {
151 calcularResultado();
152 } else if(tecla.equals("CE")) {
153 resultado = 0;
154 pantalla.setText("");
155 nuevaOperacion = true;
156 } else {
157 operacion = tecla;
158 if((resultado > 0) && !nuevaOperacion) {
159 calcularResultado();
160 } else {
161 resultado = new Double(pantalla.getText());
162 }
163 }
164
165 nuevaOperacion = true;
166 }
167
168 /**
169 * Calcula el resultado y lo muestra por pantalla
170 */
171 private void calcularResultado() {
172 if (operacion.equals("+")) {
173 resultado += new Double(pantalla.getText());
174 } else if (operacion.equals("-")) {
175 resultado -= new Double(pantalla.getText());
176 } else if (operacion.equals("/")) {
177 resultado /= new Double(pantalla.getText());
178 } else if (operacion.equals("*")) {
179 resultado *= new Double(pantalla.getText());
180 }
181
182 pantalla.setText("" + resultado);
183 operacion = "";
184 }
185 }
Etiquetas: ejercicios, Java