Pues sigo con la calculadora, haciendola un poco más compleja. Ya tengo todos los numeros puestos y funciona de maravilla, pero no sé cómo lo hace. Es decir, no sabía como hacer para que al pulsar un botón númerico escribiera dicho número y al darle al anterior mantuviera el primero y añadiera el segundo. Buscando por internet encontré un código que hacia lo que yo buscaba. EL caso es que funciona, pero no entiendo el código y me gustará saber si alguién de por aqu´ñi puede explicarme lo que hace dicho código. Me interesa porque lo que yo habría echo en 10 if con este código se hace en uno y con dos líneas de código.
Las líneas de código que no entiendo son estas:
Código:
char c = ((JButton) e.getSource()).getText().charAt(0);
if (c >= '0' && c <= '9') {
textfield1.setText(textfield1.getText() + c);
}
Os dejo el código para que veaís como voy. Ya sé que el código tiene optimización 0, pero de momento es lo único que sé hacer.
Código Java:
Ver originalimport javax.swing.*;
import java.awt.event.*;
import java.awt.*;
private JButton boton1, boton2, boton3, boton4, boton5, boton6, boton7, boton8, boton9, boton10, boton11, boton12, boton13, boton14, boton15, boton16
; private String cad1
=null, cad2
=null; private int operador=0;
private int x=0, y=0;
public Formulario (){
setLayout(null);
textfield1.setBounds(10, 10, 190, 40);
textfield1.
setHorizontalAlignment(JTextField.
RIGHT); add(textfield1);
setJMenuBar(m);
menu
= new JMenu("Opciones"); m.add(menu);
acerca.addActionListener(this);
menu.add(acerca);
salir.addActionListener(this);
menu.add(salir);
ventana.setBounds(800, 400, 150, 100);
ventana.setResizable(false);
label1
= new JLabel ("Calculadora. v 1.0"); boton1.setBounds(10, 60, 50, 40);
add(boton1);
boton2.setBounds(60, 60, 50, 40);
add(boton2);
boton3.setBounds(110, 60, 50, 40);
add(boton3);
boton4.setBounds(10, 100, 50, 40);
add(boton4);
boton5.setBounds(60, 100, 50, 40);
add(boton5);
boton6.setBounds(110, 100, 50, 40);
add(boton6);
boton7.setBounds(10, 140, 50, 40);
add(boton7);
boton8.setBounds(60, 140, 50, 40);
add(boton8);
boton9.setBounds(110, 140, 50, 40);
add(boton9);
boton10.setBounds(160, 140, 50, 40);
add(boton10);
boton11.setBounds(160, 60, 50, 40);
add(boton11);
boton12.setBounds(210, 60, 50, 40);
add(boton12);
boton13.setBounds(160, 100, 50, 40);
add(boton13);
boton14.setBounds(210, 100, 50, 40);
add(boton14);
boton15.setBounds(210, 10, 50, 39);
add(boton15);
boton16.setBounds(210, 140, 50, 40);
add(boton16);
boton1.addActionListener(this);
boton2.addActionListener(this);
boton3.addActionListener(this);
boton4.addActionListener(this);
boton5.addActionListener(this);
boton6.addActionListener(this);
boton7.addActionListener(this);
boton8.addActionListener(this);
boton9.addActionListener(this);
boton10.addActionListener(this);
boton11.addActionListener(this);
boton12.addActionListener(this);
boton13.addActionListener(this);
boton14.addActionListener(this);
boton15.addActionListener(this);
boton16.addActionListener(this);
}
char c
= ((JButton) e.
getSource()).
getText().
charAt(0);
if(e.getSource()==acerca){
}
if(e.getSource()==salir){
}
if (c >= '0' && c <= '9') {
textfield1.setText(textfield1.getText() + c);
}
if (e.getSource()==boton11){
cad1= textfield1.getText();
textfield1.setText(null);
operador= 1;
}
if (e.getSource()==boton12){
cad1= textfield1.getText();
textfield1.setText(null);
operador= 2;
}
if (e.getSource()==boton13){
cad1= textfield1.getText();
textfield1.setText(null);
operador= 3;
}
if (e.getSource()==boton14){
cad1= textfield1.getText();
textfield1.setText(null);
operador= 4;
}
if (e.getSource()==boton15){
textfield1.setText(null);
cad1=null;
cad2=null;
x=0;
y=0;
operador=0;
}
if (e.getSource()==boton16){
cad2= textfield1.getText();
if (operador==1){
int suma= x+y;
textfield1.setText(null);
textfield1.setText(resultado);
}
if (operador==2){
int resta= x-y;
textfield1.setText(null);
textfield1.setText(resultado);
}
if (operador==3){
int producto= x*y;
textfield1.setText(null);
textfield1.setText(resultado);
}
if (operador==4){
if (x>y){
float division= x/y;
textfield1.setText(null);
textfield1.setText(resultado);
} else {
setTitle("La operación no puede realizarse.");
}
}
operador=0;
}
}
public static void main
(String[]ar
){ Formulario calc= new Formulario();
calc.setBounds(800, 400, 300, 250);
calc.setResizable(false);
calc.setVisible(true);
}
}
También me gustaría saber como configurar el menú, para que al hacer click en el item "Acerca de..." se abra el JFrame "ventana" con el JLabel "label1" o una manera de crear una ventana con texto cuando el usuario haga click en dicha opción. También como puedo hacer que se cierre el programa cuando haga click en "Salir".
Si os fijáis tengo los elementos creados y los dos if dentro del actionPerformed, pero he estado porbando varias cosas y no he conseguido nada, a parte de una pantalla llena de código rojo...XD
Muchas gracias por adelantado.
Salu2, VanRaidex.