Anteriormente he compartido un ejemplo de una calculadora básica usando los cuadros de dialogo en java, la cual es un poco tediosa al momento de realizar las operaciones, pero en post mostrare algo mas grafico, usando lo que se ha explicado en las anteriores entradas: Crear ventanas, Botones, Formularios básicos, JPaneles y arreglos de botones.
El proyecto esta dividido en dos partes, una el cual contiene el método principal, y la otra clase contiene la interfaz, eventos y operaciones realizadas por el ejercicio practico. El programilla realiza las cuatro operaciones básicas de las matemáticas (suma, resta, multiplicación y división), ademas cuenta con el uso de memorias, borrado total (pantalla y memoria) raíz cuadrada, y manejo de decimales. Bueno ya sabiendo que realiza el ejercicio, continuare mostrando el código para la aplicación.
Comparte este articulo y obtén el contenido premium!
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class CalculadoraGUI {
public static void main(String[] args) {
String ax = System.getProperty("os.name"); //variable que toma el nombre del sistema operativo que se tenga instalado
if(ax.equals("Windows 7") || ax.equals("Windows")){//si es un sistema windows se aplica el skin que tiene java para windows
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
interfaz w = new interfaz();
// TODO code application logic here
} catch (ClassNotFoundException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
}
}
if(ax.equals("Linux")){//si es un sistema linux se aplica el skin que tiene java para linux
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
interfaz w = new interfaz();
// TODO code application logic here
} catch (ClassNotFoundException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class interfaz implements ActionListener{
JTextField jt1, jt2;
Panel pN, pb1, pb3;
JPanel pS, pb2;
JButton mc, mr, ms, mMas, mMenos, numeros[], operaciones[];
String oper[]={"R", "C", "+", "/", "-" ,"*", "="}, ax="";
float n1, n2, nr, M;//variables para las operaciones
int tipOp; //para controlar el tipo de operacion que se realiza
boolean t=false;//control sobre escribir un nuevo numero despues de alguna operacion cambia a true cuando se ha realizado una operacion
public interfaz(){
JFrame jfMain = new JFrame("Calculator");
jfMain.setLayout(new BorderLayout(4, 4));
norte();
sur();
jfMain.add(pN, BorderLayout.NORTH);
jfMain.add(pS, BorderLayout.CENTER);
jfMain.setLocation(100, 80);
jfMain.setResizable(false);
jfMain.setVisible(true);
jfMain.setSize(300, 380);
jfMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void norte(){
pN = new Panel(null);
jt1 = new JTextField("");
jt2 = new JTextField("0");
jt1.setHorizontalAlignment(JTextField.RIGHT);
jt2.setHorizontalAlignment(JTextField.RIGHT);
//Quitar bordes a los campos de texto
jt1.setBorder(BorderFactory.createLineBorder(Color.white));
jt2.setBorder(BorderFactory.createLineBorder(Color.white));
//desabilitando los campos de texto
jt1.setEditable(false);
jt2.setEditable(false);
jt1.setBackground(Color.white);
jt2.setBackground(Color.white);
pN.add(jt1); pN.add(jt2);
jt1.setBounds(35, 10, 200, 15);
jt2.setBounds(35, 25, 200, 30);
pN.setSize(270, 47);
pN.setVisible(true);
}
public void sur(){
pS = new JPanel(new BorderLayout(6, 50));
pS.setLayout(new BorderLayout(4, 4));
botMem();
botNum();
botOpe();
pS.add(pb1, BorderLayout.NORTH);
pS.add(pb2, BorderLayout.CENTER);
pS.add(pb3, BorderLayout.EAST);
pS.setSize(270, 330);
}
public void botMem(){
pb1 = new Panel(null);
mc = new JButton("MC"); mr = new JButton("MR");
ms = new JButton("MS"); mMas = new JButton("M+");
mMenos = new JButton("M-");
mc.setFont(new Font("Arial", Font.BOLD, 11));
mr.setFont(new Font("Arial", Font.BOLD, 11));
ms.setFont(new Font("Arial", Font.BOLD, 11));
mMas.setFont(new Font("Arial", Font.BOLD, 11));
mMenos.setFont(new Font("Arial", Font.BOLD, 11));
mc.setMargin(new Insets(1, 1, 1, 1)); mr.setMargin(new Insets(1, 1, 1, 1));
ms.setMargin(new Insets(1, 1, 1, 1)); mMas.setMargin(new Insets(1, 1, 1, 1));
mMenos.setMargin(new Insets(1, 1, 1, 1));
mc.setBounds(35, 0, 33, 33); mr.setBounds(78, 0, 33, 33); ms.setBounds(121, 0, 33, 33);
mMas.setBounds(164, 0, 33, 33); mMenos.setBounds(207, 0, 33, 33);
pb1.add(mc); pb1.add(mr); pb1.add(ms); pb1.add(mMas); pb1.add(mMenos);
mc.addActionListener(this); mr.addActionListener(this); ms.addActionListener(this);
mMas.addActionListener(this); mMenos.addActionListener(this);
pb1.setSize(270, 45);
pb1.setVisible(true);
}
public void botNum(){
pb2 = new JPanel(null);
int nx3=121, nx2=121, nx1=121, n3y=0, n2y=43, n1y=86;
numeros = new JButton[11];
//*****************************************
//bloque para crear los botones, añadirlos y asignar numeros
for (int i=0; i<=10; i++){
if(i<=9){ numeros[i] = new JButton(""+i); pb2.add(numeros[i]); numeros[i].setMargin(new Insets(1, 1, 1, 1)); numeros[i].addActionListener(this); } else{ numeros[i] = new JButton("."); pb2.add(numeros[i]); numeros[i].setMargin(new Insets(1, 1, 1, 1)); numeros[i].addActionListener(this); } } //****************************************** //bloque para posicionar botones for(int i=10; i>=0; i--){
if(i==10){
numeros[i].setBounds(121, 129, 35, 35);
}
else{
if(i<=9 && i>=7){
numeros[i].setBounds(nx3, n3y, 35, 35);
nx3-=43;
}
else if(i<=6 && i>=4){
n3y+=43;
numeros[i].setBounds(nx2, n2y, 35, 35);
nx2-=43;
}
else if(i<=3 && i>=1){
n3y+=43;
numeros[i].setBounds(nx1, n1y, 35, 35);
nx1-=43;
}
else if(i==0){
numeros[i].setBounds(35, 129, 78, 35);
}
}
}
pb2.setSize(170, 150);
pb2.setVisible(true);
}
public void botOpe(){
pb3 = new Panel(null);
int c=0, x=0, y=0;
operaciones = new JButton[7];
for(int i=0; i<=6; i++){
if(c<=1){
operaciones[i] = new JButton(oper[i]);
pb3.add(operaciones[i]);
operaciones[i].setBounds(x, y, 30, 35);
operaciones[i].setMargin(new Insets(1, 1, 1, 1));
operaciones[i].addActionListener(this);
x+=33;
c++;
}
else{
if(i==6){
x=0; y+=43;
operaciones[i] = new JButton(oper[i]);
pb3.add(operaciones[i]);
operaciones[i].setBounds(x, y, 65, 35);
operaciones[i].setMargin(new Insets(1, 1, 1, 1));
operaciones[i].addActionListener(this);
x+=33;
c++;
}
else{
c=0;
x=0; y+=43;
operaciones[i] = new JButton(oper[i]);
pb3.add(operaciones[i]);
operaciones[i].setBounds(x, y, 30, 35);
operaciones[i].setMargin(new Insets(1, 1, 1, 1));
operaciones[i].addActionListener(this);
x+=33;
c++;
}
}
}
pb3.setVisible(true);
pb3.setSize(120, 200);
}
public boolean isN(String ax){
try{
int n = Integer.parseInt(ax);
return true;
}catch(NumberFormatException e){
return false;
}
}
@Override
public void actionPerformed(ActionEvent e) {
String op="";
if(isN(e.getActionCommand())){ //cuando se oprimen numeros
if(jt1.getText().equals("")){
ax += e.getActionCommand();
jt2.setText(ax);
}
else{
if(tipOp==0){
if(t){
ax="";
jt1.setText(jt2.getText());
ax += e.getActionCommand();
jt2.setText(ax);
t = false;
}
else{
ax="";
ax += jt2.getText()+e.getActionCommand();
jt2.setText(ax);
}
}else{
ax="";
ax += jt2.getText()+e.getActionCommand();
jt2.setText(ax);
}
}
}
else{//cuando se oprime el resto de botones
if(e.getActionCommand().equals("R") ){
jt1.setText("");
Float a = Float.parseFloat(jt2.getText());
jt2.setText(""+Math.sqrt(a));
}
if(e.getActionCommand().equals("C") ){ //para reiniciar valores y limpiar pantalla
tipOp=0; n1 = 0; n2 =0; nr=0; jt1.setText(""); jt2.setText("0"); ax="";
}
if(e.getActionCommand().equals("MC")){//para limpiar la memoria de la calculadora
ms.setForeground(Color.black);
jt1.setText(""); jt2.setText("0");
M=0;
}
if(e.getActionCommand().equals("MR")){//para mostrar valor almacenado en la memoria
jt1.setText("");
jt2.setText(String.valueOf(M));
}if(e.getActionCommand().equals("MS")){//guardar un valor en la memoria
ms.setForeground(Color.red);
M = Float.parseFloat(jt2.getText());
}
if(e.getActionCommand().equals("M+")){//sumar valor de la pantalla con el valor de la memoria
M += Float.parseFloat(jt2.getText());
}
if(e.getActionCommand().equals("M-")){//restar valor de la pantalla con el valor de la memoria
M -= Float.parseFloat(jt2.getText());
}
if(e.getActionCommand().equals(".")){//usar el punto para los decimales
ax="";
if(numeros[10].isEnabled()){
numeros[10].setEnabled(false);
ax = jt2.getText() +".";
jt2.setText(ax);
}
}
if(e.getActionCommand().equals("+") ){//boton suma
numeros[10].setEnabled(true);
ax="";
if(tipOp==1){
}else if(tipOp==0 ){//validacion para no chocar con otras operaciones
if(jt1.getText().equals("") ){
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText()+jt2.getText();
jt1.setText(ax+" + ");
jt2.setText("");
tipOp = 1;
}
else {
if(!t){//validacion para nueva operacion
n1 = Float.parseFloat(jt2.getText());
ax += jt2.getText();
jt1.setText(ax+" + ");
jt2.setText("");
tipOp = 1;
}
else{//usar otras operaciones con la suma
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText();
jt1.setText(ax+" + ");
jt2.setText("");
tipOp = 1;
}
}
}
}
if(e.getActionCommand().equals("-") ){//cuando se decide restar
numeros[10].setEnabled(true);
ax="";
if(tipOp==2){
}else if(tipOp==0){//validacion para no chocar con otras operaciones
if(jt1.getText().equals("")){
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText()+ jt2.getText();
jt1.setText(ax+" - ");
jt2.setText("");
tipOp = 2;
}
else{
if(!t){//validacion para nueva operacion
n1 = Float.parseFloat(jt2.getText());
ax += jt2.getText();
jt1.setText(ax+" - ");
jt2.setText("");
tipOp = 2;
}
else{//usar otras operaciones con la suma
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText();
jt1.setText(ax+" - ");
jt2.setText("");
tipOp = 2;
}
}
}
}
if(e.getActionCommand().equals("*") ){//cuando se decide multiplicar
numeros[10].setEnabled(true);
ax="";
if(tipOp==3){
}else if(tipOp==0){//validacion para no chocar con otras operaciones
if(jt1.getText().equals("")){
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText()+jt2.getText();
jt1.setText(ax+" * ");
jt2.setText("");
tipOp = 3;
}
else{
if(!t){//validacion para nueva operacion
n1 = Float.parseFloat(jt2.getText());
ax += jt2.getText();
jt1.setText(ax+" * ");
jt2.setText("");
tipOp = 3;
}
else{//usar otras operaciones con la suma
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText();
jt1.setText(ax+" * ");
jt2.setText("");
tipOp = 3;
}
}
}
}
if(e.getActionCommand().equals("/") ){//cuando se decide dividir
numeros[10].setEnabled(true);
ax="";
if(tipOp==4){
}else if(tipOp==0){//validacion para no chocar con otras operaciones
if(jt1.getText().equals("")){
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText()+jt2.getText();
jt1.setText(ax+" / ");
jt2.setText("");
tipOp = 4;
}
else{
if(!t){//validacion para nueva operacion
n1 = Float.parseFloat(jt2.getText());
ax += jt2.getText();
jt1.setText(ax+" / ");
jt2.setText("");
tipOp = 4;
}
else{//usar otras operaciones con la suma
n1 = Float.parseFloat(jt2.getText());
ax += jt1.getText();
jt1.setText(ax+" / ");
jt2.setText("");
tipOp = 4;
}
}
}
}
if(e.getActionCommand().equals("=") && !jt2.getText().equals("")){
t = true;
if(tipOp==1){//operacion para la suma
tipOp = 0;
ax="";
ax+=jt1.getText() + jt2.getText();
jt1.setText(ax);
n2 = Float.parseFloat(jt2.getText());
nr=n1+n2;
jt2.setText(String.valueOf(nr));
}
else if(tipOp==2){ //operacion para la resta
tipOp = 0;
ax="";
ax+=jt1.getText()+jt2.getText();
jt1.setText(ax);
n2 = Float.parseFloat(jt2.getText());
nr=n1-n2;
jt2.setText(String.valueOf(nr));
}
if(tipOp==3){ //operacion para la multiplicacion
tipOp = 0;
ax="";
ax+=jt1.getText()+jt2.getText();
jt1.setText(ax);
n2 = Float.parseFloat(jt2.getText());
nr=n1*n2;
jt2.setText(String.valueOf(nr));
}
if(tipOp==4){ //operacion para la multiplicacion
if(Float.parseFloat(jt2.getText())!=0){
tipOp = 0;
ax="";
ax+=jt1.getText()+jt2.getText();
jt1.setText(ax);
n2 = Float.parseFloat(jt2.getText());
nr=n1/n2;
jt2.setText(String.valueOf(nr));
}
else
JOptionPane.showMessageDialog(null, "No se puede realizar divison por 0");
}
}
}
}
}
Una vez ejecutada la aplicación veremos lo siguiente:
La segunda clase es larga, ya que en esta se realizaron varias validaciones, como también al momento de realizar las operaciones, el ejercicio se trato de realizar lo mas parecido posible a la calculadora de Windows. Espero que el ejercicio practico sea de gran utilidad 😉
¿Has notado aplicaciones desconocidas o un drenaje inesperado de la batería? Estos podrían ser indicios…
Saber cómo Restablecer un iPhone a su Estado de Fábrica es clave para solucionar problemas…
Motorola ha confirmado el lanzamiento de Moto G84 5G y Moto G54 5G en India,…
Recuerde WizardCoder, ¿el codificador de IA que cubrimos recientemente aquí en Windows Report? Nos jactamos…
Los investigadores han descubierto numerosos fallos de seguridad en el complemento WordPress Jupiter X Core…
Para solucionar problemas del sistema de PC con Windows, necesitará una herramienta dedicada Fortect es…
Ver comentarios
Disculpe queria saber como le hace para poner los botones con punta redonda?
hi this is a very important for my work since I am in high school and as this was what most caught my attention I need your help because it is very difficult for me this programming and then you do not understand all this programming it is not mine. I would be very grateful if you lean on this job posting videos that are more useful to me.
If so thank you very much for yu collaboration and for your help us programmers.
Thank you and goodbye
Thanks for reading my blog. The problem for you with the videos is that would make in Spanish, and so you see your native language is English.
In any case it is something that could soon make, as for work and family time to devote to my blog is almost limited.
Greetings and success!
Saludos.
Gracias por el artículo.
Será posible me pases el código de la solución completa?
Te agradezco de antemano!