Home Foros Foro dudas Foro de Java Video 85: ¿boolean en true es capaz de borrar lo que se escribe?

Video 85: ¿boolean en true es capaz de borrar lo que se escribe?

Viendo 6 entradas - de la 1 a la 6 (de un total de 6)
  • Autor
    Entradas
  • #15930

    Victor
    Participante

    Hola a todos, comunidad de pildorasinformaticas ¿Qué tal? Acudo a ustedes nuevamente, ya que estaba viendo el video 85, y el señor Díaz colocó en la linea 108 una variable boolean en true, haciendo que esta borre cuando se escriba algún signo matemático en la calculadora. Me da a entender que dos clases internas tienen relación a pesar de que no esté pidiendo más que ese dato boolean. Abordo el código para el que lo quiera ver atentamente, no está completo para no abrumarlos tanto. Es la linea 108, en la clase AccionOrden. Que comiencen bien la semana. Hasta luego.

     

    package graficos;

    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    /**
     *
     * @author KindlyChat
     */
    public class Curso83_Calculadora {
        
        public static void main(String [] args){
            
            MarcoCalculadora mimarco = new MarcoCalculadora();
            mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            mimarco.setVisible(true);
            
        }
        
    }

    class MarcoCalculadora extends JFrame{
        
        public MarcoCalculadora(){
            
            setTitle(«Calculadora»);
            setBounds(500, 300, 450, 300);
            LaminaCalculadora lamina = new LaminaCalculadora();
            add(lamina);
        }
        
    }

    class LaminaCalculadora extends JPanel{
        
        public LaminaCalculadora(){
            
            principio = true;
            setLayout(new BorderLayout());
            pantalla = new JButton(«0»);
            pantalla.setEnabled(false);
            add(pantalla, BorderLayout.NORTH);
            ActionListener insertar = new InsertaNumero();
            ActionListener orden = new AccionOrden();
            milamina2 = new JPanel();
            milamina2.setLayout(new GridLayout(4, 4));
            ponerBoton(«7», insertar);
            ponerBoton(«8», insertar);
            ponerBoton(«9», insertar);
            ponerBoton(«/», orden);
            ponerBoton(«4», insertar);
            ponerBoton(«5», insertar);
            ponerBoton(«6», insertar);
            ponerBoton(«*», orden);
            ponerBoton(«1», insertar);
            ponerBoton(«2», insertar);
            ponerBoton(«3», insertar);
            ponerBoton(«-«, orden);
            ponerBoton(«0», insertar);
            ponerBoton(«.», insertar);
            ponerBoton(«=», orden);
            ponerBoton(«+», orden);
            
            add(milamina2,BorderLayout.CENTER);
            
        }
        
        private void ponerBoton(String rotulo, ActionListener oyente){
            
            JButton boton = new JButton(rotulo);
            boton.addActionListener(oyente);
            milamina2.add(boton);
        }
        
        private class InsertaNumero implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent ae) {
                
                String entrada = ae.getActionCommand();
                
                if(principio){
                
                    pantalla.setText(«»);
                    principio = false;
                
                }
                
                pantalla.setText(pantalla.getText() + entrada);/*Manera de no ver el primer cero, y almacenar
                los números que se pulsan.*/
                
            }
            
        }
        
        private class AccionOrden implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent ae) {
                
                 principio = true;
                
            }
            
            
            
        }
        
        private JPanel milamina2;
        private JButton pantalla;
        private boolean principio;
    }

    #16028

    Kabuto
    Participante

    Ese boolean llamado principio es un atributo/variable de ámbito global porque está declarado dentro de la clase principal.

    Esto significa que cualquier otra clase o método declarado también dentro de esta clase principal (<span style=»color: #444444; font-family: Lato; font-size: 14px; font-weight: bold;»>Curso83_Calculadora</span>), puede acceder a ese boolean. Es visible para todos los subprogramas internos de esta clase.

    Si esa variable estuviera declarada dentro de una de las clase internas, entonces no sería visible para las demás clases. Pero al ser de ámbito global, todas pueden utilizarla.

    Está declarada al final del código:

     

    <span style=»box-sizing: border-box; font-weight: bold; color: #444444; font-family: Lato; font-size: 14px;»>    private JPanel milamina2;</span><br style=»box-sizing: border-box; color: #444444; font-family: Lato; font-size: 14px;» /><span style=»box-sizing: border-box; font-weight: bold; color: #444444; font-family: Lato; font-size: 14px;»>    private JButton pantalla;</span><br style=»box-sizing: border-box; color: #444444; font-family: Lato; font-size: 14px;» /><span style=»box-sizing: border-box; font-weight: bold; color: #3361FF; font-family: Lato; font-size: 14px;»>    private boolean principio;</span><br style=»box-sizing: border-box; color: #3361ff; font-family: Lato; font-size: 14px;» /><span style=»box-sizing: border-box; font-weight: bold; color: #444444; font-family: Lato; font-size: 14px;»>}</span>

    #16029

    Kabuto
    Participante

    Perdón por el código HTML que se ha colado en mi mensaje al copiar y pegar texto del primer mensaje.
    Lo editaría, pero no funciona el botón editar. (-_-x)

    #16066

    Victor
    Participante

    Hola @Kabuto ¿Qué tal? Gracias por responder. No me entendio, señor Kabuto. Lo que no entiendo es que lo que hay dentro del método:

    private class AccionOrden implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent ae) {
                
                 principio = true;
                
            }

    Tiene sólo una instrucción, y apesar puede realizar un cambio en el programa, no tiene ninguna condición diciendo si es true o false va a realizar cierta acción. Como por ejemplo:

    if(principio){

    //Instrucciones

    }

    Lo que digo es que está solo el boolean ¿Cómo puede realizar un cambio al programa?

    Que disfrute de la semana. Hasta luego, caballero.

    Atentamente,

    Kindly Chat.

    #16068

    Kabuto
    Participante

    Hola Víctor.

    Ese método de la clase AccionOrden no depende de ninguna condición para actuar, si no que es quién altera una condición para que luego otros métodos actúen de una forma u otra.

    El ejemplo que tu pones:

    if(principio){

    //Instrucciones

    }

    Precisamente ese if, actuará de una forma u otra dependiendo de si AccionOrden ha cambiado el valor de la variable principio.

    En una calculadora real, para operar con dos números, primero tecleamos el primer valor, luego pulsamos un operador matemático (+, -, *, /) y a continuación al teclear el segundo número, se borra de la pantalla el primer número que hemos tecleado para que solo se vea el segundo valor que vamos a introducir.

    Para lograr esto, para que el programa sepa cuándo ha de quitar la pantalla el valor que se ha introducido, se usa la variable principio
    Si vale true, al teclear un valor se borrará de pantalla lo que había previamente.
    Si vale false, no se borrará, se irá añadiendo lo que se teclea, a lo que ya hay en pantalla.

    ¿Y cuándo principio adoptará valor true?
    Queremos que eso ocurra cuando se pulse uno de los operadores matemáticos, por eso, los botones de estos operadores incorporan la acción AccionOrden
    Fíjate los botones que marco en negrita:

    ponerBoton(«7», insertar);
    ponerBoton(«8», insertar);
    ponerBoton(«9», insertar);
    ponerBoton(«/», orden);
    ponerBoton(«4», insertar);
    ponerBoton(«5», insertar);
    ponerBoton(«6», insertar);
    ponerBoton(«*», orden);
    ponerBoton(«1», insertar);
    ponerBoton(«2», insertar);
    ponerBoton(«3», insertar);
    ponerBoton(«-«, orden);
    ponerBoton(«0», insertar);
    ponerBoton(«.», insertar);
    ponerBoton(«=», orden);
    ponerBoton(«+», orden);

    Cuando se pulse esos botones señalados en negrita, se ejecutará el método:

    public void actionPerformed(ActionEvent ae) {

    principio = true;

    }

    Es decir, le dará valor true a principio, para que el siguiente número que se teclee en la calculadora, no se añada a los que ya hay en pantalla, si no que borre pantalla y comience a introducirse un nuevo valor.

    Digamos que la «condición» para que se ejecute ese método, es que el usuario pulse uno de los botones que lo incorporan, que son los botones de los operadores matemáticos.

    Espero haber sabido explicarme bien. Un saludo

    #16119

    Victor
    Participante

    Hola Kabuto ¿Cómo estás? Cúanta habilidad que tenés en explicar, entendí todo. Cuando el profesor Díaz presiona «+» en el vídeo, me di cuenta que resetea el número, osea, cuando presiona un nuevo número entra en el «if» teniendo la variable booleana en «true», y ahí es cuando borra el texto del «display». Muchas gracias, Kabuto, por tomarte la molestia en explicarme, era incomplensible para mí, pero gracias a usted llegué a entender. Espero que te sigas enriqueciendo con todo el mundo de la programación, siento que cada vez es más atrapante, lo mismo espero para usted. Hasta luego, señor.

    Atentamente,
    KindlyChat.

Viendo 6 entradas - de la 1 a la 6 (de un total de 6)
  • Debes estar registrado para responder a este debate.

Píldoras Informáticas

Comencé esta aventura para dar soporte a mis alumnos presenciales. Con el apoyo de todos los que me seguís mi canal de YouTube y esta web han crecido mucho más de lo que yo esperaba. Gracias a todos por estar ahí.

Quién está aquí ahora

Foto del perfil de Evander López
Foto del perfil de Jose Luis Valls Segura
Foto del perfil de Juan Díaz
Foto del perfil de Damian Suarez
Foto del perfil de umar
Foto del perfil de David
Foto del perfil de Miguel
Foto del perfil de Maria Villascusa
Foto del perfil de ASIER MARTIN GONZALEZ
Foto del perfil de Jose
Foto del perfil de Sergio
Foto del perfil de AndrewPr0