Problema na hora de usar um objeto numa interface Swing / AWT (Calculadora)

Olá povo, blz? Estou com problemas para criar uma calculadora, parecido com o calc do Windows.
Tenho uma classe que cuida da interface, e outra que cuida dos cálculos. O problema é na hora de usar a classe “Cálculos” na interface, aparentemente os valores que vou guardando no objeto não é guardado (eu heim?). Falo isso porque testei a classe Cálculos em outra classe e funcionou perfeitamente.
Chega de embromação e vamos aos códigos:

Classe Calculadora:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class Calculadora extends JFrame {
    JPanel grid01;
    JPanel grid02;
    JTextField campoCalculadora;
    JButton um;
    JButton dois;
    JButton tres;
    JButton quatro;
    JButton cinco;
    JButton seis;
    JButton sete;
    JButton oito;
    JButton nove;
    JButton zero;
    JButton adicao;
    JButton subtracao;
    JButton multiplicacao;
    JButton divisao;
    JButton limpar;
    JButton igual;
    JButton botaoBranco03;
    String auxCampoCalculadora;
    int contCampoCalculadora;

    public Calculadora(){
        //Instanciando objetos de suporte
        auxCampoCalculadora = new String();
        contCampoCalculadora = 1;

        //Instanciando os objetos do 1ºJPanel
        campoCalculadora = new JTextField();

        //Instanciando os objetos do 2ºJPanel
        um = new JButton("1");
        dois = new JButton("2");
        tres = new JButton("3");
        quatro = new JButton("4");
        cinco = new JButton("5");
        seis = new JButton("6");
        sete = new JButton("7");
        oito = new JButton("8");
        nove = new JButton("9");
        adicao = new JButton("+");
        subtracao = new JButton("-");
        divisao = new JButton("/");
        multiplicacao = new JButton("*");
        limpar = new JButton("C");
        igual = new JButton("=");
        botaoBranco03 = new JButton(" ");


        //Adicionando os objetos no 1ºJPanel
        grid01 = new JPanel(new GridLayout(1,1));
        grid01.add(campoCalculadora);

        //Adicionando os objetos no 2ºJPanel
        grid02 = new JPanel(new GridLayout(4,4));
        grid02.add(um);
        grid02.add(dois);
        grid02.add(tres);
        grid02.add(adicao);

        grid02.add(quatro);
        grid02.add(cinco);
        grid02.add(seis);
        grid02.add(subtracao);

        grid02.add(sete);
        grid02.add(oito);
        grid02.add(nove);
        grid02.add(multiplicacao);
        
        grid02.add(limpar);
        grid02.add(igual);
        grid02.add(botaoBranco03);
        grid02.add(divisao);

        //Adicionado as acoes para os objetos
        Ouvinte ov = new Ouvinte();

        //Adicionando acao dos botoes
        
        um.addActionListener(ov);
        dois.addActionListener(ov);
        tres.addActionListener(ov);
        quatro.addActionListener(ov);
        cinco.addActionListener(ov);
        seis.addActionListener(ov);
        sete.addActionListener(ov);
        oito.addActionListener(ov);
        nove.addActionListener(ov);
        limpar.addActionListener(ov);
        igual.addActionListener(ov);

        adicao.addActionListener(ov);


        this.getContentPane().add(grid01, BorderLayout.CENTER);
        this.getContentPane().add(grid02, BorderLayout.SOUTH);
        pack();
        //setSize(300,200);
        this.setTitle("Cadastra Pessoa");
	this.setVisible(true);
	this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public static void main(String[] args){
        Calculadora secaoCalculadora = new Calculadora();
    }

    class Ouvinte implements ActionListener{
        public void actionPerformed(ActionEvent evt){
            Calculos calc = new Calculos();

            if(evt.getSource() == um){
                campoCalculadora.setText(campoCalculadora.getText()+"1");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == dois){
                campoCalculadora.setText(campoCalculadora.getText()+"2");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == tres){
                campoCalculadora.setText(campoCalculadora.getText()+"3");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == quatro){
                campoCalculadora.setText(campoCalculadora.getText()+"4");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == cinco){
                campoCalculadora.setText(campoCalculadora.getText()+"5");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == seis){
                campoCalculadora.setText(campoCalculadora.getText()+"6");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == sete){
                campoCalculadora.setText(campoCalculadora.getText()+"7");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == oito){
                campoCalculadora.setText(campoCalculadora.getText()+"8");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == nove){
                campoCalculadora.setText(campoCalculadora.getText()+"9");
                if(calc.getTipoOperacao() == 0)
                    calc.setPrimeiroValor(campoCalculadora.getText());
                else
                    calc.setSegundoValor(campoCalculadora.getText());
            }
            if(evt.getSource() == limpar){

            }
            if(evt.getSource() == igual){
                   campoCalculadora.setText(calc.calcularResultado());
            }

            if(evt.getSource() == adicao){
                if(calc.getTipoOperacao() == 0){
                    calc.setTipoOperacao(1);
                    campoCalculadora.setText("");
                }
                else{
                    calc.calcularResultado();
                    calc.setTipoOperacao(1);
                }
            }
        }
    }

}

Classe Cálculos:

import javax.swing.JOptionPane;

public class Calculos {
    private String primeiroValor;
    private String segundoValor;
    private int tipoOperacao;
    private String resultado;

public Calculos(){
    primeiroValor = new String();
    segundoValor = new String();
    tipoOperacao = 0;
    resultado = new String();
}

    public String getPrimeiroValor() {
        return primeiroValor;
    }

    public void setPrimeiroValor(String JTextPrimeiroValor) {
        primeiroValor = JTextPrimeiroValor;
//
//        if(primeiroValor.isEmpty())
//            JOptionPane.showMessageDialog(null, "String 1 Vazia");
//        else
//            JOptionPane.showMessageDialog(null, "String 1 nao esta vazia");
    }
    public void limpaPrimeiroValor() {
        segundoValor = "";
    }

    public String getSegundoValor() {
        return segundoValor;
    }

    public void setSegundoValor(String JTextSegundoValor) {
        segundoValor = JTextSegundoValor;
        //if(segundoValor.isEmpty())
            //JOptionPane.showMessageDialog(null, "String 2 Vazia");
        //else
            //JOptionPane.showMessageDialog(null, "String 2 nao esta vazia");
    }
    public void limpaSegundoValor() {
        segundoValor = "";
    }

    public int getTipoOperacao() {
        return tipoOperacao;
    }

    public void setTipoOperacao(int tipoOperacao) {
        this.tipoOperacao = tipoOperacao;
    }

    public String calcularResultado(){
        int p1 = 0;
        int p2 = 0;

        try{
            p1 = Integer.parseInt(primeiroValor);
            p2 = Integer.parseInt(segundoValor);
        }
        catch(NumberFormatException e){
            JOptionPane.showMessageDialog(null, "AAAAAAAAAAAAAAA");
        }

        switch(tipoOperacao){
                case 1:
                    resultado = String.valueOf(p1+p2);
                    break;
                //só fiz a adicao, por enquanto

        }
        
        return resultado;
    }

}

Classe Só de Teste:

import javax.swing.JOptionPane;

public class ClasseTeste {

    public static void main(String[] args){
        Calculos lol = new Calculos();

        lol.setPrimeiroValor("7");
        lol.setSegundoValor("5");
        lol.setTipoOperacao(1);
        System.out.println("Resultado "+lol.calcularResultado());
        
    }
}

Senhores, agradeço a atenção!

O problema é que toda vez que o método actionPerformed do seu Ouvinte é executado ele instancia uma nova Calculadora, perdendo os valores que estavam setados anteriormente.

Ou, de maneira prática:

  1. Retire a linha 120
  2. Abaixo, substitua “calc.” por nada (imagine como se os métodos simplesmente existissem no ouvinte. COmo é uma inner class, irão existir e chamar o da calculadora).

Se você realmente gosta de ter alguma coisa antes do ., pode usar Calculadora.this no lugar de calc.

Senhores, consegui aqui! instanciei a classe “Calculos” no método construtor e deu certo. De fato, eu estava instanciando a Classe toda vez que apertava no botão. Obrigado à todos pela dica! Um abraço!