Ver Mensaje Individual
  #6 (permalink)  
Antiguo 12/11/2011, 05:55
vanraidex
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 13 años, 2 meses
Puntos: 1
Pregunta Calculadora mejorada - Dudas

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 original
  1. import javax.swing.*;
  2.  
  3. import java.awt.event.*;
  4. import java.awt.*;
  5.  
  6. public class Formulario extends JFrame implements ActionListener {
  7.    
  8.     private JTextField textfield1;
  9.     private JLabel label1;
  10.     private JMenuBar m;
  11.     private JMenu menu;
  12.     private JMenuItem acerca, salir;
  13.     private JFrame ventana;
  14.     private JButton boton1, boton2, boton3, boton4, boton5, boton6, boton7, boton8, boton9, boton10, boton11, boton12, boton13, boton14, boton15, boton16;
  15.     private String cad1=null, cad2=null;
  16.     private int operador=0;
  17.     private int x=0, y=0;
  18.        
  19.        
  20.     public Formulario (){
  21.         setLayout(null);
  22.         textfield1= new JTextField();
  23.         textfield1.setBounds(10, 10, 190, 40);
  24.         textfield1.setHorizontalAlignment(JTextField.RIGHT);
  25.         add(textfield1);
  26.         m= new JMenuBar();
  27.         setJMenuBar(m);
  28.         menu= new JMenu("Opciones");
  29.         m.add(menu);
  30.         acerca=new JMenuItem("Acerca de...");
  31.         acerca.addActionListener(this);
  32.         menu.add(acerca);
  33.         salir= new JMenuItem("Salir");
  34.         salir.addActionListener(this);
  35.         menu.add(salir);
  36.         ventana= new JFrame();
  37.         ventana.setBounds(800, 400, 150, 100);
  38.         ventana.setResizable(false);
  39.         label1= new JLabel ("Calculadora. v 1.0");
  40.         boton1= new JButton("1");
  41.         boton1.setBounds(10, 60, 50, 40);
  42.         add(boton1);
  43.         boton2=new JButton ("2");
  44.         boton2.setBounds(60, 60, 50, 40);
  45.         add(boton2);
  46.         boton3= new JButton("3");
  47.         boton3.setBounds(110, 60, 50, 40);
  48.         add(boton3);
  49.         boton4=new JButton ("4");
  50.         boton4.setBounds(10, 100, 50, 40);
  51.         add(boton4);
  52.         boton5=new JButton ("5");
  53.         boton5.setBounds(60, 100, 50, 40);
  54.         add(boton5);
  55.         boton6=new JButton ("6");
  56.         boton6.setBounds(110, 100, 50, 40);
  57.         add(boton6);
  58.         boton7=new JButton ("7");
  59.         boton7.setBounds(10, 140, 50, 40);
  60.         add(boton7);
  61.         boton8=new JButton ("8");
  62.         boton8.setBounds(60, 140, 50, 40);
  63.         add(boton8);
  64.         boton9=new JButton ("9");
  65.         boton9.setBounds(110, 140, 50, 40);
  66.         add(boton9);
  67.         boton10=new JButton ("0");
  68.         boton10.setBounds(160, 140, 50, 40);
  69.         add(boton10);
  70.         boton11=new JButton ("+");
  71.         boton11.setBounds(160, 60, 50, 40);
  72.         add(boton11);
  73.         boton12=new JButton ("-");
  74.         boton12.setBounds(210, 60, 50, 40);
  75.         add(boton12);
  76.         boton13=new JButton ("*");
  77.         boton13.setBounds(160, 100, 50, 40);
  78.         add(boton13);
  79.         boton14=new JButton ("/");
  80.         boton14.setBounds(210, 100, 50, 40);
  81.         add(boton14);
  82.         boton15=new JButton ("C");
  83.         boton15.setBounds(210, 10, 50, 39);
  84.         add(boton15);
  85.         boton16=new JButton ("=");
  86.         boton16.setBounds(210, 140, 50, 40);
  87.         add(boton16);
  88.         boton1.addActionListener(this);
  89.         boton2.addActionListener(this);
  90.         boton3.addActionListener(this);
  91.         boton4.addActionListener(this);
  92.         boton5.addActionListener(this);
  93.         boton6.addActionListener(this);
  94.         boton7.addActionListener(this);
  95.         boton8.addActionListener(this);
  96.         boton9.addActionListener(this);
  97.         boton10.addActionListener(this);
  98.         boton11.addActionListener(this);
  99.         boton12.addActionListener(this);
  100.         boton13.addActionListener(this);
  101.         boton14.addActionListener(this);
  102.         boton15.addActionListener(this);
  103.         boton16.addActionListener(this);
  104.        
  105.     }
  106.    
  107.    
  108.     public void actionPerformed (ActionEvent e){
  109.         char c = ((JButton) e.getSource()).getText().charAt(0);
  110.        
  111.         if(e.getSource()==acerca){
  112.                        
  113.         }
  114.        
  115.         if(e.getSource()==salir){
  116.            
  117.         }
  118.        
  119.         if (c >= '0' && c <= '9') {
  120.             textfield1.setText(textfield1.getText() + c);
  121.         }
  122.        
  123.         if (e.getSource()==boton11){
  124.             cad1= textfield1.getText();
  125.             textfield1.setText(null);
  126.             operador= 1;
  127.            
  128.         }
  129.         if (e.getSource()==boton12){
  130.             cad1= textfield1.getText();
  131.             textfield1.setText(null);
  132.             operador= 2;
  133.            
  134.         }
  135.         if (e.getSource()==boton13){
  136.             cad1= textfield1.getText();
  137.             textfield1.setText(null);
  138.             operador= 3;
  139.            
  140.         }
  141.         if (e.getSource()==boton14){
  142.             cad1= textfield1.getText();
  143.             textfield1.setText(null);
  144.             operador= 4;
  145.            
  146.         }
  147.        
  148.         if (e.getSource()==boton15){
  149.             textfield1.setText(null);
  150.             cad1=null;
  151.             cad2=null;
  152.             x=0;
  153.             y=0;
  154.             operador=0;
  155.            
  156.         }
  157.         if (e.getSource()==boton16){
  158.             cad2= textfield1.getText();
  159.                        
  160.             if (operador==1){
  161.                 x= Integer.parseInt(cad1);
  162.                 y= Integer.parseInt(cad2);
  163.                 int suma= x+y;
  164.                 String resultado= String.valueOf(suma);
  165.                 textfield1.setText(null);
  166.                 textfield1.setText(resultado);
  167.  
  168.             }
  169.             if (operador==2){
  170.                 x= Integer.parseInt(cad1);
  171.                 y= Integer.parseInt(cad2);
  172.                 int resta= x-y;
  173.                 String resultado= String.valueOf(resta);
  174.                 textfield1.setText(null);
  175.                 textfield1.setText(resultado);
  176.  
  177.             }
  178.             if (operador==3){
  179.                 x= Integer.parseInt(cad1);
  180.                 y= Integer.parseInt(cad2);
  181.                 int producto= x*y;
  182.                 String resultado= String.valueOf(producto);
  183.                 textfield1.setText(null);
  184.                 textfield1.setText(resultado);
  185.  
  186.             }
  187.             if (operador==4){
  188.                 x= Integer.parseInt(cad1);
  189.                 y= Integer.parseInt(cad2);
  190.                 if (x>y){
  191.                     float division= x/y;
  192.                     String resultado= String.valueOf(division);
  193.                     textfield1.setText(null);
  194.                     textfield1.setText(resultado);
  195.                 } else {
  196.                     setTitle("La operación no puede realizarse.");
  197.                 }
  198.                
  199.  
  200.             }
  201.             operador=0;
  202.         }
  203.        
  204.        
  205.                                                
  206.     }  
  207.    
  208.     public static void main (String[]ar){
  209.         Formulario calc= new Formulario();
  210.         calc.setBounds(800, 400, 300, 250);
  211.         calc.setResizable(false);
  212.         calc.setVisible(true);
  213.     }
  214.    
  215.    
  216.  
  217. }

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.