No puedo modificar el JTextField.

Publicado en 'Programación' por Chanox, 12 Jun 2018, 22:18.





  1. Chanox

    Chanox Miembro frecuente

    Registro:
    16 Mar 2015
    Mensajes:
    207
    Likes:
    2
    Temas:
    51




    Estaba probando algunas cosas.. y bueno, tratando de hacer por cuenta propia una calculadora simple pero no me permite cambiar el texto del JTextField al presionar un boton.

    Código:
    public class Frame extends JFrame{
        
        public Frame(){
            setTitle("Calculadora...");
            setSize(400, 400);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            
            add(new PanelResultado(), BorderLayout.NORTH);
            add(new PanelOperaciones(), BorderLayout.CENTER);
            
            setVisible(true);
        }
        
    }
    
    class PanelResultado extends JPanel{
        private JTextField res = null;
    
        public PanelResultado() {
            setLayout(new BorderLayout());
            
            res = new JTextField("0");
            res.setFont(new Font("Arial", Font.PLAIN, 16));
            res.setBackground(Color.BLACK);
            res.setForeground(Color.WHITE);
            res.setPreferredSize(new Dimension(400, 50));
            res.setHorizontalAlignment(JTextField.RIGHT);
            res.setEditable(false);
            add(res);
        }
    
        public JTextField getRes() {
            return res;
        }
    
        public void setRes(JTextField res) {
            this.res = res;
        }
        
    }
    
    class PanelOperaciones extends JPanel{
        
        private JButton b1 = null;
        private PanelResultado panel;
        
        public PanelOperaciones() {
            setLayout(new GridLayout(4, 4));
            
            agregarBoton("9");
            agregarBoton("8");
            agregarBoton("7");
            agregarBoton("( / )");
            
            agregarBoton("6");
            agregarBoton("5");
            agregarBoton("4");
            agregarBoton("( * )");
            
            agregarBoton("3");
            agregarBoton("2");
            agregarBoton("1");
            agregarBoton("( + )");
            
            agregarBoton("0");
            agregarBoton("Limpiar");
            agregarBoton("( = )");
            agregarBoton("( - )");
            
            panel = new PanelResultado();
        }
        
        private void agregarBoton(String n) {
            b1 = new JButton(n);
            b1.setBackground(Color.BLACK);
            b1.setForeground(Color.WHITE);
            b1.setFont(new Font("Arial",Font.PLAIN, 15));
            
            add(b1);
            
            ejecutar();
        }
        
        void ejecutar() {
            
            
            ActionListener oyente = new ActionListener() {
        
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    
                    panel.getRes().setText(" asdadasa");
                    
                }
            };
            
            b1.addActionListener(oyente);
            
        }
        
        
    }

    En el metodo ejecutar casi al final intento cambiar los datos del JTextField y nada.. tb, intente crear un metodo donde cambiaba su texto en la clase donde está el JTextField , para asi acceder a este metodo desde la siguiente clase donde estan los botones pero tampoco cambia..
     


  2. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    1,706
    Likes:
    649
    Temas:
    62
    Código:
     public void setRes(string texto) {
           this.res.setText(texto);
       }
    
    Código:
    public void actionPerformed(ActionEvent arg0) {
                   panel.setRes(" asdadasa");
               }
    
     
  3. Chanox

    Chanox Miembro frecuente

    Registro:
    16 Mar 2015
    Mensajes:
    207
    Likes:
    2
    Temas:
    51
    Hola, sí, eso también ya lo había probado (olvide decirlo) pero igual no funciona.. :(
     
  4. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    1,706
    Likes:
    649
    Temas:
    62
    Porque :
    - En la clase Frame estas creando una instancia de PanelResultado, la que ves con el 0
    Código:
    add(new PanelResultado()
    
    - En la clase PanelOperaciones estas creando otra instancia
    Código:
    panel = new PanelResultado();
    
    La cual no la agregas al JPanel por lo que no se ve y es a la cual le estas cambiando el texto.
     
  5. Chanox

    Chanox Miembro frecuente

    Registro:
    16 Mar 2015
    Mensajes:
    207
    Likes:
    2
    Temas:
    51
    Exacto.. jaja, ya arregle el problema haciendo estatico el metodo que devuelve al JTextField, para así usarlo en la otra clase. Qué otras opciones para arreglar el problema existen?? Gracias.
     
  6. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    1,706
    Likes:
    649
    Temas:
    62
    Deja a un lado swing/awt y refuerza mas OOP con java puro que estas cometiendo errores por no tenerlo claro.
     
  7. Chanox

    Chanox Miembro frecuente

    Registro:
    16 Mar 2015
    Mensajes:
    207
    Likes:
    2
    Temas:
    51
    Por q crees q debo repasar poo? a que errores te refieres?