¡Hola!
Es genial que estés trabajando en un proyecto de compiladores. Aquí te dejo una idea básica para implementar una calculadora en Java. Puedes usar Swing para diseñar el marco (frame) y los botones, que es bastante intuitivo y fácil para proyectos iniciales.
Boceto del frame:
Tu interfaz podría incluir:
Una barra de entrada de texto para escribir los números o expresiones.
Botones para los números (0-9) y operadores (+, -, *, /).
Un botón "C" para limpiar la entrada y "=" para calcular el resultado.
Código inicial para la interfaz gráfica:
Aquí tienes un ejemplo básico de cómo construir el frame con Swing:
Código: Seleccionar todo
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculadora extends JFrame implements ActionListener {
private JTextField textField;
private JPanel panel;
private String operator = "";
private double num1 = 0, num2 = 0;
public Calculadora() {
// Configuración de la ventana
setTitle("Calculadora");
setSize(300, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// Campo de texto para mostrar la entrada y resultados
textField = new JTextField();
textField.setHorizontalAlignment(JTextField.RIGHT);
textField.setEditable(false);
add(textField, BorderLayout.NORTH);
// Panel para los botones
panel = new JPanel();
panel.setLayout(new GridLayout(4, 4));
// Botones de la calculadora
String[] botones = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"C", "0", "=", "+"
};
for (String b : botones) {
JButton boton = new JButton(b);
boton.addActionListener(this);
panel.add(boton);
}
add(panel, BorderLayout.CENTER);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String comando = e.getActionCommand();
// Acciones según el botón presionado
if (comando.matches("\\d")) { // Si es un número
textField.setText(textField.getText() + comando);
} else if (comando.equals("C")) { // Limpiar
textField.setText("");
num1 = num2 = 0;
operator = "";
} else if (comando.equals("=")) { // Calcular resultado
num2 = Double.parseDouble(textField.getText());
switch (operator) {
case "+": textField.setText(String.valueOf(num1 + num2)); break;
case "-": textField.setText(String.valueOf(num1 - num2)); break;
case "*": textField.setText(String.valueOf(num1 * num2)); break;
case "/":
if (num2 != 0)
textField.setText(String.valueOf(num1 / num2));
else
textField.setText("Error");
break;
}
} else { // Guardar operador y primer número
num1 = Double.parseDouble(textField.getText());
operator = comando;
textField.setText("");
}
}
public static void main(String[] args) {
new Calculadora();
}
}
Siguientes pasos:
Extender funcionalidades: Puedes añadir más operadores como potencia (^) o raíz cuadrada.
Manejo de errores: Asegúrate de manejar errores como divisiones por cero o entradas no válidas.
Optimizaciones: Considera usar una pila para manejar expresiones más complejas (como las hojas electrónicas).
¡Espero que esto te sirva como punto de partida!

Si necesitas más ayuda, no dudes en preguntar.
