public class Launcher {
public static void main(String[] args) { Modelo modelo = new Modelo();
Vista vista = new Vista(modelo);
}
}
public class Modelo {
private float operando1;
private char operador;
public void addOperando1(float operando1) { this.operando1 = operando1;
}
public void addOperandor(char operador) { this.operador = operador;
}
public float operacion(float operando2) { switch (operador) { case '+':
return operando1 + operando2;
case '-':
return operando1 - operando2;
case '*':
return operando1 * operando2;
default:
return operando1 / operando2;
}
}
}
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
public class Vista extends JFrame implements ActionListener {
private JLabel lblDisplay;
private final Modelo modelo;
public Vista(Modelo modelo) { this.modelo = modelo;
initComponents();
}
private void initComponents() {
//Establece condiciones básicas
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
pack();
//Establece el lookAndFeel
try { for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Windows".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception ex) { System.out.println("No se puede implementar LookAndFeel"); }
//Agrega label para mostrar resultados
lblDisplay = new JLabel();
lblDisplay.setBackground(new Color(255, 255, 255));
lblDisplay.setFont(new Font("Tahoma", 0, 17)); // NOI18N
lblDisplay.setHorizontalAlignment(SwingConstants.RIGHT);
lblDisplay.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
lblDisplay.setOpaque(true);
getContentPane().add(lblDisplay);
lblDisplay.setBounds(30, 30, 270, 40);
//Agrega el panel de los botones
JPanel pnlBotones = new JPanel();
pnlBotones.setLayout(new GridLayout(4, 4, 3, 3));
getContentPane().add(pnlBotones);
pnlBotones.setBounds(30, 90, 270, 200);
//Coloca los botones
JButton[] botones = new JButton[16];
String[] textoBotones = {"7","8","9","/", "4","5","6","*",
"1","2","3","-",
"=","0",".","+"};
for (int i=0; i<botones.length; i++) { botones[i] = new JButton();
botones[i].setText(textoBotones[i]);
botones[i].setFont(new Font("Tahoma", 0, 17)); botones[i].addActionListener(this);
pnlBotones.add(botones[i]);
}
//Hace otras operaciones
this.setBounds(200, 200, 345, 350);
lblDisplay.setText("0"); this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
JButton boton = (JButton)(e.getSource());
DecimalFormat format = new DecimalFormat("#.######"); format.setDecimalSeparatorAlwaysShown(false);
if("+-*/".contains(boton.getText())){ float numero1 = Float.parseFloat(lblDisplay.getText());
modelo.addOperando1(numero1);
char operador = boton.getText().charAt(0);
modelo.addOperandor(operador);
lblDisplay.setText("0"); } else if("=".contains(boton.getText())){ float numero2 = Float.parseFloat(lblDisplay.getText());
float resultado = modelo.operacion(numero2);
lblDisplay.setText("" + format.format(resultado)); } else if("0123456789".contains(boton.getText())){ String numero = lblDisplay.getText();
if(numero.equals("0")){ numero = "";
}
numero = numero + boton.getText();
lblDisplay.setText(numero);
} else if(".".contains(boton.getText())){ String numero = lblDisplay.getText();
if(!numero.contains(".")){ numero = numero + boton.getText();
lblDisplay.setText(numero);
} else { lblDisplay.setText("0"); }
}
}
}